ในการขอเอกสารจากเว็บเซิร์ฟเวอร์เบราว์เซอร์ใช้โปรโตคอล HTTP คุณอาจรู้ชื่อนั้นจากแถบที่อยู่ของคุณ (อาจถูกซ่อนไว้ในตอนนี้ แต่เมื่อคุณคลิกที่แถบที่อยู่ให้คัดลอก URL และวางในตัวแก้ไขข้อความบางตัวคุณจะเห็นhttp://
ที่จุดเริ่มต้น) HTTP เป็นโปรโตคอลข้อความที่เรียบง่าย มันได้ผลเช่นนี้:
ขั้นแรกเบราว์เซอร์ของคุณเชื่อมต่อกับเซิร์ฟเวอร์ของเว็บไซต์และส่ง URL ของเอกสารที่ต้องการดาวน์โหลด (หน้าเว็บเป็นเอกสารด้วย) และรายละเอียดบางอย่างเกี่ยวกับตัวเบราว์เซอร์ ( User-Agentฯลฯ ) ตัวอย่างเช่นหากต้องการโหลดหน้าหลักในเว็บไซต์ SuperUser http://superuser.com/
เบราว์เซอร์ของฉันจะส่งคำขอที่มีลักษณะดังนี้:
GET / HTTP/1.1
Host: superuser.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.0 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: [removed for security]
DNT: 1
If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT
บรรทัดแรกระบุว่าเอกสารใดที่เซิร์ฟเวอร์ควรส่งคืน บรรทัดอื่น ๆ เรียกว่าส่วนหัว พวกเขามีลักษณะเช่นนี้:
Header name: Header value
บรรทัดเหล่านี้ส่งข้อมูลเพิ่มเติมที่ช่วยให้เซิร์ฟเวอร์ตัดสินใจว่าจะทำอย่างไร
หากทุกอย่างเรียบร้อยเซิร์ฟเวอร์จะตอบกลับด้วยการส่งเอกสารที่ร้องขอ การตอบสนองเริ่มต้นด้วยข้อความสถานะตามด้วยส่วนหัวบางส่วน (พร้อมรายละเอียดเกี่ยวกับเอกสาร) และในที่สุดหากเนื้อหาของเอกสารนั้นดี นี่คือความคิดเห็นของเซิร์ฟเวอร์ SuperUser สำหรับคำขอของฉัน:
HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Type: text/html; charset=utf-8
Expires: Tue, 09 Jul 2013 07:27:20 GMT
Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT
Vary: *
X-Frame-Options: SAMEORIGIN
Date: Tue, 09 Jul 2013 07:26:19 GMT
Content-Length: 139672
<!DOCTYPE html>
<html>
[...snip...]
</html>
หลังจากบรรทัดสุดท้ายเซิร์ฟเวอร์ของ SuperUser ปิดการเชื่อมต่อ
บรรทัดแรก ( HTTP/1.1 200 OK
) มีรหัสการตอบสนอง200 OK
ในกรณีนี้มันเป็น หมายความว่าเซิร์ฟเวอร์ตัดสินใจว่าสามารถส่งคืนเอกสารตามที่ร้องขอและสัญญาว่าเนื้อหาที่ตามมาจะเป็นเอกสารดังกล่าว หากไม่ใช่ในกรณีที่รหัสจะเป็นอย่างอื่นและจะให้การบ่งชี้บางส่วนของเหตุผลที่เซิร์ฟเวอร์ไม่เพียงแค่ส่งคืนเอกสารตามการตอบสนอง: ตัวอย่างเช่นถ้ามันไม่สามารถหาเอกสารที่ร้องขอก็ควรจะกลับและถ้าคุณไม่ได้รับอนุญาตในการเข้าถึงเนื้อหาในคำถามที่มันควรจะกลับมา404 Not Found
403 Forbidden
หลังจากบรรทัดสถานะแรกนี้ส่วนหัวการตอบสนองจะตามมา Content-type
พวกเขาให้ข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาที่จะส่งกลับเช่นของมัน
ถัดไปเป็นบรรทัดว่าง มันส่งสัญญาณความจริงที่ว่าไม่มีส่วนหัวการตอบสนองอีก ทุกอย่างที่ผ่านมาบรรทัดนั้นคือเนื้อหาของเอกสารที่ร้องขอ ดังนั้นในตัวอย่างข้างต้น<!DOCTYPE html>
คือบรรทัดแรกของหน้าแรก SuperUser (เอกสาร HTML) ถ้าฉันขอให้ดาวน์โหลดเอกสารมันอาจจะเป็นตัวอักษรที่พูดพล่อยๆเพราะรูปแบบเอกสารส่วนใหญ่ไม่สามารถอ่านได้โดยไม่ต้องดำเนินการก่อน
กลับไปที่ส่วนหัว Content-Length
หนึ่งที่น่าสนใจที่สุดสำหรับเราคือคนสุดท้าย มันแจ้งให้เบราว์เซอร์ทราบจำนวนไบต์ของข้อมูลที่ควรคาดหวังหลังจากบรรทัดว่างดังนั้นโดยทั่วไปแล้วขนาดของเอกสารที่แสดงเป็นไบต์ ส่วนหัวนี้ไม่บังคับและอาจถูกละเว้นโดยเซิร์ฟเวอร์ บางครั้งขนาดของเอกสารไม่สามารถคาดการณ์ได้ (ตัวอย่างเช่นเมื่อเอกสารถูกสร้างขึ้นอย่างฉับพลัน) บางครั้งโปรแกรมเมอร์ที่ขี้เกียจไม่ได้รวมมัน (พบได้ทั่วไปในเว็บไซต์ดาวน์โหลดไดรเวอร์) บางครั้งเว็บไซต์ก็ถูกสร้างขึ้นโดยมือใหม่ที่ไม่รู้ ของส่วนหัวดังกล่าว
อย่างไรก็ตามไม่ว่าเหตุผลใดก็ตามส่วนหัวอาจหายไป ในกรณีนี้เบราว์เซอร์ไม่ทราบว่าเซิร์ฟเวอร์จะส่งข้อมูลไปเท่าใดและแสดงขนาดเอกสารไม่เป็นที่รู้จักรอให้เซิร์ฟเวอร์ปิดการเชื่อมต่อ และนี่คือเหตุผลสำหรับขนาดเอกสารที่ไม่รู้จัก