जब कोई ब्राउज़र HTTP अनुरोध करता है, तो यह इस तरह दिखता है:
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>
सर्वर पर चलने वाला कोई भी कोड जो टीसीपी सॉकेट पर अनुरोधों को सुनता है, अनुरोध को पढ़ता है, और उचित प्रतिक्रिया के साथ उत्तर पर्याप्त होगा। एक गूंगा तरीका सिर्फ शेल स्क्रिप्ट का उपयोग करके टीसीपी पोर्ट 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 प्रोटोकॉल का पालन करने के लिए मुश्किल से दिखाई देती है ।
उस डिब्बाबंद प्रतिक्रिया से एक कदम यह सरल पायथन कार्यक्रम है, जो 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()
HTTP सर्वर किसी भी भाषा में लिखा जा सकता है; यह सिर्फ एक उदाहरण है। जाहिर है, यह उदाहरण बहुत ही अल्पविकसित है। पेलोड हार्ड-कोडेड है - प्रोग्राम पूरी तरह से अनुरोध की सामग्री को अस्वीकार करता है - URL, क्वेरी स्ट्रिंग, स्वीकार-भाषा हेडर, आदि। आप अनुरोध के आधार पर सार्थक प्रतिक्रियाओं को उत्पन्न करने के लिए कोड जोड़ सकते हैं, लेकिन तब कोड बहुत मिल जाएगा जटिल। इसके अलावा, प्रोग्रामर वेब एप्लिकेशन लिखने पर ध्यान केंद्रित करेंगे, ताकि HTTP अनुरोध को संभालने के तरीके के बारे में चिंता न हो।
वेब सर्वर का उपयोग करने के लिए एक अधिक उपयुक्त समाधान होगा, जैसे कि अपाचे एचटीडी , आईआईएस , या नेग्नेक्स । एक वेब सर्वर सिर्फ एक प्रोग्राम है जो संबंधित टीसीपी सॉकेट्स पर सुनता है, कई अनुरोधों (संभवतः एक साथ) को स्वीकार करता है, और यह अनुरोध करता है कि अनुरोध URL, हेडर और अन्य नियमों के आधार पर प्रतिक्रिया कैसे उत्पन्न की जाए। आदर्श रूप से, कई विवरण, जैसे कि एसएसएल, एक्सेस कंट्रोल, और संसाधन सीमाओं को कोड के बजाय कॉन्फ़िगरेशन के माध्यम से ध्यान रखा जाता है। ज्यादातर समय, वेब सर्वर एक प्रतिक्रिया तैयार करेगा जिसमें फाइलसिस्टम की फाइलों से सामग्री होती है।
गतिशील सामग्री के लिए, हालांकि, प्रतिक्रिया उत्पन्न करने के लिए वेब सर्वर को कुछ कोड निष्पादित करने के लिए कॉन्फ़िगर किया जा सकता है। सीजीआई के साथ ऐसा करने के लिए एक तंत्र - सर्वर अनुरोध के आधार पर कुछ पर्यावरण चर निर्धारित करता है, एक प्रोग्राम निष्पादित करता है, और इसके आउटपुट को टीसीपी सॉकेट में कॉपी करता है। एक और अधिक परिष्कृत समाधान के लिए एक मॉड्यूल होगा जो किसी अन्य प्रोग्रामिंग भाषा (जैसे अपाचे के लिए mod_php ) में कॉलिंग कोड के लिए वेब सर्वर को समर्थन जोड़ता है । फिर भी एक अन्य विकल्प वेब सर्वर को वेब एप्लिकेशन के रूप में उसी भाषा में लिखना है, जिस स्थिति में अनुरोध प्रेषण केवल एक फ़ंक्शन कॉल है। यह Apache Tomcat जैसे node.js और Java सर्वलेट इंजन के मामले में है ।
प्रौद्योगिकी का विकल्प वास्तव में आप पर निर्भर है, और आप जिस प्रोग्रामिंग भाषा का उपयोग करना चाहते हैं, उस पर निर्भर करता है, होस्टिंग वातावरण जो आपके लिए उपलब्ध है, प्रदर्शन की आवश्यकताएं, लोकप्रिय राय, और गुजरने वाले सनक। उदाहरण के लिए, CGI हाल ही में इष्ट नहीं रहा है, क्योंकि बाहरी कार्यक्रमों को लॉन्च करने की आवश्यकता स्केलेबिलिटी को सीमित करती है।