যখন কোনও ব্রাউজার কোনও এইচটিটিপি অনুরোধ করে, তখন এটির মতো দেখাচ্ছে:
GET /search?q=cats HTTP/1.0
Host: www.google.com
Connection: close
… যাতে সার্ভারের এমন প্রতিক্রিয়া প্রেরণ করা উচিত যা দেখে মনে হচ্ছে:
HTTP/1.0 200 Success
Content-Type: text/html; charset=UTF-8
Content-Length: 1337
<!DOCTYPE html>
<html>
<head><title>cats - Google Search</title>
<body>
<h1>About 415,000,000 results</h1>
…
</body>
</html>
কোন যথাযথ প্রতিক্রিয়া মাধ্যমে কোডের সার্ভারে চলমান একটি TCP সকেট থেকে অনুরোধ জন্য শোনা, অনুরোধ সার্চ, এবং জবাব দেওয়া যথেষ্ট হবে। একটি বোবা উপায় হ'ল শেল স্ক্রিপ্ট ব্যবহার করে যে কেউ টিসিপি পোর্ট 80 এর সাথে সংযোগ স্থাপন করে তার কাছে একটি ক্যান ডাবের প্রতিক্রিয়া আউট করা:
$ nc -l 8000 <<'RESPONSE'
HTTP/1.0 200 Success
Content-Type: text/html; charset=UTF-8
Content-Length: 1337
<!DOCTYPE html>
<html>
<head><title>cats - Google Search</title>
<body>
<h1>About 415,000,000 results</h1>
…
</body>
</html>
RESPONSE
অবশ্যই, সেই কৌশলটি কেবল এইচটিটিপি প্রোটোকলের সাথে মেনে চলেছে ।
ক্যানড প্রতিক্রিয়া থেকে এক ধাপ উপরে এই সাধারণ পাইথন প্রোগ্রাম, যা http.server
পাইথন 3- এ লাইব্রেরি ব্যবহার করে ।
#!/usr/bin/python3
import http.server
class Handler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
payload = '<!DOCTYPE html>... insert cats here ...'.encode('UTF-8')
self.send_response(200)
self.send_header('Content-Type', 'text/html; charset=UTF-8')
self.send_header('Content-Length', len(payload))
self.end_headers()
self.wfile.write(payload)
http.server.HTTPServer(('', 80), Handler).serve_forever()
এইচটিটিপি সার্ভার যে কোনও ভাষায় লেখা যেতে পারে; যে শুধু একটি উদাহরণ। স্পষ্টতই, এই উদাহরণটি খুব প্রাথমিক কাজ। পে-লোডটি হার্ড-কোডেড - প্রোগ্রামটি অনুরোধের বিষয়বস্তুগুলি - ইউআরএল, ক্যোয়ারী স্ট্রিং, স্বীকৃতি-ভাষা শিরোলেখ ইত্যাদি পুরোপুরি উপেক্ষা করে আপনি অনুরোধের ভিত্তিতে অর্থবোধক প্রতিক্রিয়া তৈরি করতে কোড যুক্ত করতে পারেন, তবে তারপরে কোডটি খুব পাবেন জটিল। এছাড়াও, প্রোগ্রামাররা ওয়েব অ্যাপ্লিকেশন লেখার দিকে মনোনিবেশ করবে, এইচটিটিপি অনুরোধটি কীভাবে পরিচালনা করতে হবে তার বিশদ সম্পর্কে চিন্তা করার দরকার নেই।
আরও উপযুক্ত সমাধান হ'ল ওয়েব সার্ভার যেমন অ্যাপাচি এইচটিটিপিডি , আইআইএস , বা এনজিনেক্স ব্যবহার করা । একটি ওয়েব সার্ভার হ'ল একটি প্রোগ্রাম যা প্রাসঙ্গিক টিসিপি সকেটগুলিতে শোনায়, একাধিক অনুরোধ গ্রহণ করে (সম্ভবত একসাথে সম্ভবত), এবং অনুরোধ ইউআরএল, শিরোনাম এবং অন্যান্য নিয়মের উপর ভিত্তি করে প্রতিক্রিয়া কীভাবে উত্পন্ন করা যায় তা স্থির করে। আদর্শভাবে, অনেকগুলি বিবরণ, যেমন এসএসএল, অ্যাক্সেস নিয়ন্ত্রণ এবং সংস্থান সীমা কোডের পরিবর্তে কনফিগারেশনের মাধ্যমে নেওয়া হয়। বেশিরভাগ সময়, ওয়েব সার্ভার একটি প্রতিক্রিয়া তৈরি করে যা ফাইল সিস্টেমের ফাইলগুলি থেকে কেবলমাত্র সামগ্রী অন্তর্ভুক্ত করে।
গতিশীল সামগ্রীর জন্য, যদিও, প্রতিক্রিয়া উত্পন্ন করতে ওয়েব সার্ভারটি কিছু কোড সম্পাদন করতে কনফিগার করা যেতে পারে। এটি করার জন্য একটি পদ্ধতি সিজিআইয়ের সাথে রয়েছে - সার্ভারটি অনুরোধের ভিত্তিতে কিছু পরিবেশের ভেরিয়েবল সেট করে, একটি প্রোগ্রাম চালায় এবং এর ফলাফলটি টিসিপি সকেটে অনুলিপি করে। আরও কিছু পরিশীলিত সমাধান হতে পারে এমন একটি মডিউল যা অন্য একটি প্রোগ্রামিং ভাষায় কোডিং কোডের জন্য ওয়েব সার্ভারে সমর্থন যোগ করে (যেমন অ্যাপাচি-র জন্য মোড_এফপি )। তবুও আরেকটি বিকল্প হ'ল ওয়েব সার্ভারটিকে ওয়েব অ্যাপ্লিকেশন হিসাবে একই ভাষায় লিখতে হবে, সেক্ষেত্রে অনুরোধ প্রেরণ কেবল একটি ফাংশন কল। এটি হ'ল নোড.জেএস এবং জাভা সার্লেটলেট ইঞ্জিন যেমন অ্যাপাচি টমক্যাটের ক্ষেত্রে ।
প্রযুক্তির পছন্দটি সত্যই আপনার উপর নির্ভর করে এবং আপনি যে প্রোগ্রামিং ভাষাটি ব্যবহার করতে পছন্দ করেন তার উপর নির্ভর করে, আপনার কাছে উপলব্ধ হোস্টিং পরিবেশ, পারফরম্যান্সের প্রয়োজনীয়তা, জনপ্রিয় মতামত এবং উত্তীর্ণ ফ্যাড। উদাহরণস্বরূপ, সিজিআই ইদানীং পক্ষে নেওয়া যায় নি, যেহেতু বাহ্যিক প্রোগ্রামগুলি চালু করার প্রয়োজনীয়তা সীমাবদ্ধতার সীমাবদ্ধ করে।