เมื่อเบราว์เซอร์ทำการร้องขอ 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>
รหัสใด ๆ ที่ทำงานบนเซิร์ฟเวอร์ที่รับฟังคำขอบนซ็อกเก็ต TCP อ่านคำขอและตอบกลับด้วยการตอบสนองที่เหมาะสมจะเพียงพอ วิธีหนึ่งที่โง่คือการแยกการตอบกลับสำเร็จรูปสำหรับทุกคนที่เชื่อมต่อกับพอร์ต 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เท่านั้น
การก้าวขึ้นมาจากการตอบกลับสำเร็จรูปนั้นเป็นโปรแกรม Python ง่าย ๆ นี้ซึ่งใช้http.server
ไลบรารีใน Python 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
วิธีการแก้ปัญหาที่เหมาะสมมากขึ้นจะใช้เว็บเซิร์ฟเวอร์เช่นApache HTTPD , IISหรือNginx เว็บเซิร์ฟเวอร์เป็นเพียงโปรแกรมที่ฟังบนซ็อกเก็ต TCP ที่เกี่ยวข้องยอมรับการร้องขอหลายรายการ (อาจพร้อมกัน) และตัดสินใจว่าจะสร้างการตอบสนองอย่างไรตาม URL คำขอส่วนหัวและกฎอื่น ๆ จะเป็นการดีที่รายละเอียดจำนวนมากเช่น SSL, การควบคุมการเข้าถึงและการ จำกัด ทรัพยากรได้รับการดูแลผ่านการกำหนดค่ามากกว่ารหัส บ่อยครั้งที่เว็บเซิร์ฟเวอร์จะกำหนดคำตอบที่ประกอบด้วยเนื้อหาจากไฟล์ในระบบไฟล์
สำหรับเนื้อหาแบบไดนามิกเว็บเซิร์ฟเวอร์สามารถกำหนดค่าให้รันโค้ดบางอย่างเพื่อสร้างการตอบสนอง กลไกหนึ่งในการทำเช่นนั้นคือกับ CGI - เซิร์ฟเวอร์ตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างตามคำขอดำเนินงานโปรแกรมและคัดลอกผลลัพธ์ไปยังซ็อกเก็ต TCP โซลูชันที่ซับซ้อนกว่านี้เล็กน้อยคือการมีโมดูลที่เพิ่มการสนับสนุนไปยังเว็บเซิร์ฟเวอร์สำหรับการเรียกรหัสในภาษาการเขียนโปรแกรมอื่น (เช่นmod_php สำหรับ Apache ) อีกทางเลือกหนึ่งคือการเขียนเว็บเซิร์ฟเวอร์ในภาษาเดียวกับเว็บแอปพลิเคชันซึ่งในกรณีนี้การจัดส่งคำขอเป็นเพียงการเรียกใช้ฟังก์ชัน นั่นคือกรณีที่มีNode.jsและเครื่องมือเซิร์ฟเล็ต Java เช่นApache Tomcat
ทางเลือกของเทคโนโลยีขึ้นอยู่กับคุณและขึ้นอยู่กับภาษาการเขียนโปรแกรมที่คุณต้องการใช้สภาพแวดล้อมการโฮสต์ที่พร้อมใช้งานสำหรับคุณข้อกำหนดด้านประสิทธิภาพความคิดเห็นยอดนิยม ตัวอย่างเช่น CGI ไม่ได้รับการสนับสนุนเมื่อเร็ว ๆ นี้เนื่องจากความต้องการที่จะเปิดตัวโปรแกรมภายนอก จำกัด ขีดความสามารถในการขยาย