HTTP: โปรโตคอลสำหรับการถ่ายโอนไฮเปอร์มีเดีย 🌐
บทความนี้แปลและอธิบายข้อมูลเกี่ยวกับ HTTP จากเอกสาร MDN เป็นภาษาไทย ครอบคลุมแนวคิดพื้นฐาน วิธีการทำงาน และส่วนประกอบต่าง ๆ ของ HTTP
HTTP ⚡
Hypertext Transfer Protocol (HTTP) คือโปรโตคอลระดับแอปพลิเคชันที่ใช้สำหรับส่งเอกสารไฮเปอร์มีเดีย เช่น HTML 📄
มันถูกออกแบบมาสำหรับการสื่อสารระหว่างเว็บเบราว์เซอร์และเว็บเซิร์ฟเวอร์ แต่ก็สามารถใช้งานในวัตถุประสงค์อื่น ๆ ได้ เช่น
- การสื่อสารระหว่างเครื่องกับเครื่อง (machine-to-machine communication) 🤖
- การเข้าถึง API แบบโปรแกรมเมติก 🔌
- และอื่น ๆ...
HTTP ปฏิบัติตามโมเดลลูกค้าผู้ให้บริการ (client-server) แบบดั้งเดิม โดยที่:
- Client: เปิดการเชื่อมต่อเพื่อส่งคำขอ (request) 📤
- Server: รอและส่งการตอบกลับ (response) 📥
HTTP เป็นโปรโตคอลแบบไม่มีสถานะ (stateless) หมายความว่าเซิร์ฟเวอร์จะไม่เก็บข้อมูลเซสชันระหว่างคำขอสองคำขอ
(แม้ว่าการเพิ่ม cookies 🍪 ในภายหลังจะช่วยเพิ่มสถานะในบางการติดต่อระหว่าง client และ server)
📚 References (เอกสารอ้างอิง)
เอกสารอ้างอิงของ HTTP มีข้อมูลโดยละเอียดเกี่ยวกับ:
- Headers: ส่วนหัวของข้อความที่ใช้ส่งข้อมูลเมตา
- Request Methods: วิธีการส่งคำขอ
- Status Responses: รหัสสถานะของการตอบกลับ
- รวมถึงรายการสเปคและเอกสารมาตรฐานที่เกี่ยวข้อง 📑
📌 HTTP Headers
HTTP Headers คือส่วนหัวของข้อความที่ใช้:
- ส่งข้อมูลเมตา (metadata) เกี่ยวกับ resource หรือข้อความ HTTP
- อธิบายพฤติกรรมของ client หรือ server 🛠️
🚀 HTTP Request Methods
HTTP Request Methods บ่งบอกถึงวัตถุประสงค์ของคำขอและสิ่งที่คาดหวังหากคำขอนั้นสำเร็จ
- วิธีที่ใช้กันมากที่สุดคือ GET (สำหรับดึงข้อมูล) และ POST (สำหรับส่งข้อมูลไปยังเซิร์ฟเวอร์)
- นอกจากนี้ยังมีวิธีอื่น ๆ ที่ถูกออกแบบมาเพื่อวัตถุประสงค์ที่แตกต่างกัน 📬
📊 HTTP Response Status Codes
HTTP Response Status Codes แสดงถึงผลลัพธ์ของคำขอ HTTP
การตอบกลับจะแบ่งออกเป็น 5 กลุ่ม:
- Informational (ข้อมูลทั่วไป) ℹ️
- Successful (สำเร็จ) ✅
- Redirections (เปลี่ยนเส้นทาง) 🔀
- Client Errors (ข้อผิดพลาดของ client) ❌
- Server Errors (ข้อผิดพลาดของเซิร์ฟเวอร์) ⚠️
📚 HTTP Resources and Specifications
หน้านี้รวบรวมรายการทรัพยากรและเอกสารสเปคที่เกี่ยวข้องกับ HTTP ตั้งแต่ที่มันถูกกำหนดขึ้นครั้งแรกในช่วงต้นทศวรรษ 1990 🕰️
📖 HTTP Guides
HTTP เป็นโปรโตคอลที่สามารถขยายได้ (extensible) โดยอาศัยแนวคิด:
- Resources และ Uniform Resource Identifiers (URIs) 🔗
- โครงสร้างข้อความที่เรียบง่าย 📝
- โมเดลการสื่อสารแบบ client-server 🤝
บนพื้นฐานของแนวคิดเหล่านี้ ได้มีการพัฒนาส่วนขยาย (extensions) หลายอย่างตลอดหลายปีที่ผ่านมา
เพื่อเพิ่มฟังก์ชันการทำงานและความหมายใหม่ ๆ เช่น การเพิ่ม HTTP Methods และ Headers เพิ่มเติม
คู่มือด้านล่างนี้ถูกจัดเรียงตามลำดับจากภาพรวมทั่วไปไปจนถึงหัวข้อเฉพาะตามกรณีการใช้งาน
โดยแนะนำให้ผู้เริ่มต้นศึกษาเอกสารพื้นฐานก่อนที่จะสำรวจบทความที่มีจุดเน้นเฉพาะด้านมากขึ้น 📚
🏷️ Overview of HTTP
ภาพรวมของคุณสมบัติพื้นฐานของ HTTP:
สิ่งที่ HTTP สามารถทำได้, การใช้งานที่ตั้งใจไว้ในสถาปัตยกรรมเว็บ และตำแหน่งของมันใน protocol stack
🔄 A Typical HTTP Session
อธิบายลำดับขั้นตอนของเซสชัน HTTP:
ตั้งแต่การสร้างการเชื่อมต่อ, การส่งคำขอ ไปจนถึงการได้รับการตอบกลับ
💬 HTTP Messages
ข้อความ HTTP (ทั้งคำขอและการตอบกลับ) มีโครงสร้างที่กำหนดไว้
บทความนี้อธิบายโครงสร้างทั่วไปของข้อความ, วัตถุประสงค์ และประเภทของข้อความ
🔗 URIs
Uniform Resource Identifiers (URIs) ใช้อธิบายและระบุตำแหน่งทรัพยากรบนเว็บ
เป็นส่วนประกอบสำคัญในคำขอ HTTP
🗂️ MIME Types
ตั้งแต่ HTTP/1.0, สามารถส่งข้อมูลประเภทต่าง ๆ ได้
บทความนี้อธิบายวิธีการใช้ header Content-Type และมาตรฐาน MIME
สำหรับรายการประเภทที่ใช้กันบ่อยในหมู่นักพัฒนาเว็บ สามารถดูได้ในหัวข้อ Common MIME types
📦 Compression in HTTP
เว็บเบราว์เซอร์และเซิร์ฟเวอร์จะบีบอัดข้อความก่อนส่งผ่านเครือข่าย
เพื่อให้ปริมาณข้อมูลที่ต้องส่งลดลง ซึ่งช่วยปรับปรุงความเร็วในการถ่ายโอนและการใช้แบนด์วิธ 🚀
⚡ HTTP Caching
การแคชเป็นกลไกสำคัญสำหรับ:
- ให้ประสบการณ์ใช้งานเว็บที่รวดเร็ว
- ใช้ทรัพยากรอย่างมีประสิทธิภาพ
บทความนี้อธิบายวิธีการแคชต่าง ๆ และการใช้ HTTP Headers เพื่อควบคุมการแคช
🔐 HTTP Authentication
การตรวจสอบตัวตน (Authentication) คือวิธีการยืนยันตัวตนของ client เมื่อส่งคำขอไปยังเซิร์ฟเวอร์
เพื่อให้แน่ใจว่าเฉพาะผู้ใช้หรือระบบที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงทรัพยากรบางอย่างได้
🍪 Using HTTP Cookies
แม้ว่า HTTP จะเป็นโปรโตคอลแบบไม่มีสถานะ (stateless)
เซิร์ฟเวอร์สามารถส่ง header Set-Cookie พร้อมกับการตอบกลับ
จากนั้น client จะส่งค่าของ cookie กลับไปในทุกคำขอถัดไปในรูปแบบของ header Cookie
ซึ่งช่วยเพิ่มความสามารถในการเก็บแลกเปลี่ยนข้อมูลขนาดเล็กและเพิ่มสถานะในบางการติดต่อ
🔀 Redirections in HTTP
การเปลี่ยนเส้นทาง URL (URL redirection หรือ URL forwarding)
เป็นเทคนิคที่ให้หลาย URL สำหรับหน้าเว็บ, แบบฟอร์ม, เว็บไซต์ หรือแอปพลิเคชันเว็บ
HTTP มีการตอบกลับพิเศษที่เรียกว่า HTTP redirect สำหรับการดำเนินการนี้
🔍 HTTP Conditional Requests
ในคำขอแบบมีเงื่อนไข (conditional requests)
ผลลัพธ์ของคำขอขึ้นอยู่กับค่าของตัวตรวจสอบ (validator) ในคำขอ
วิธีนี้ถูกใช้อย่างมากในกระบวนการแคช
และในกรณีการใช้งานเช่น:
- การต่อการดาวน์โหลด
- การป้องกันการสูญเสียการอัปเดตเมื่อมีการแก้ไขเอกสารบนเซิร์ฟเวอร์
📑 HTTP Range Requests
คำขอแบบ range คือการที่ client ขอให้เซิร์ฟเวอร์ส่งเฉพาะส่วนของทรัพยากร
แทนที่จะส่งทรัพยากรทั้งหมด
มีประโยชน์เมื่อ client รู้ว่าต้องการเพียงส่วนของไฟล์ขนาดใหญ่
หรือในกรณีที่แอปพลิเคชันอนุญาตให้ผู้ใช้หยุดชั่วคราวและดำเนินการดาวน์โหลดต่อ
🤝 Content Negotiation
HTTP กำหนดชุดของ header ข้อความ โดยเริ่มต้นด้วย Accept
เพื่อให้เว็บเบราว์เซอร์ประกาศรูปแบบ, ภาษา หรือการเข้ารหัสที่ต้องการ
บทความนี้อธิบายถึงวิธีการประกาศ, การตอบสนองของเซิร์ฟเวอร์
และวิธีที่เซิร์ฟเวอร์เลือกตอบกลับที่เหมาะสมที่สุดสำหรับคำขอ
🔌 Connection Management in HTTP/1.x
HTTP/1.1 เป็นเวอร์ชันแรกที่รองรับ:
- การเชื่อมต่อแบบคงที่ (persistent connections)
- Pipelining
บทความนี้อธิบายแนวคิดทั้งสอง รวมถึงข้อดีและข้อเสียของแต่ละแบบ
📜 Evolution of HTTP
HTTP ถูกสร้างขึ้นในต้นทศวรรษ 1990 และได้รับการขยายเพิ่มเติมหลายครั้ง
บทความนี้สรุปประวัติความเป็นมาของ HTTP และอธิบายเกี่ยวกับ:
- HTTP/0.9
- HTTP/1.0
- HTTP/1.1
- HTTP/2
- HTTP/3
พร้อมทั้งนวัตกรรมใหม่ ๆ ที่ถูกนำเข้ามาในช่วงหลายปีที่ผ่านมา
⬆️ Protocol Upgrade Mechanism
HTTP/1.1 มีกลไกสำหรับอัปเกรดการเชื่อมต่อที่มีอยู่แล้วไปยังโปรโตคอลอื่น
โดยใช้ header Upgrade
ตัวอย่าง: client สามารถอัปเกรดการเชื่อมต่อจาก HTTP/1.1 เป็น HTTP/2
หรือจาก HTTP(S) เป็น WebSocket (ws / wss)
🌍 Proxy Servers and Tunneling
พร็อกซี (Proxy) สามารถอยู่บนเครื่องของผู้ใช้
หรืออยู่ที่ใดก็ได้ระหว่างผู้ใช้กับเซิร์ฟเวอร์ปลายทางบนอินเทอร์เน็ต
หน้านี้สรุปพื้นฐานเกี่ยวกับพร็อกซีและแนะนำตัวเลือกการตั้งค่าบางประการ
📝 HTTP Client Hints
Client Hints เป็นชุดของ header การตอบกลับที่เซิร์ฟเวอร์สามารถใช้เพื่อขอข้อมูลล่วงหน้าจาก client
เกี่ยวกับอุปกรณ์, เครือข่าย, ผู้ใช้ และการตั้งค่าที่เฉพาะเจาะจงของ user-agent
เซิร์ฟเวอร์จึงสามารถตัดสินใจว่าจะส่งทรัพยากรใดให้ โดยอิงตามข้อมูลที่ client เลือกที่จะให้มา
📉 Network Error Logging Experimental
Network Error Logging (NEL) เป็นกลไกที่สามารถกำหนดค่าได้ผ่าน header NEL ในการตอบกลับ HTTP
Header แบบทดลองนี้อนุญาตให้เว็บไซต์และแอปพลิเคชันเลือกเข้าร่วมเพื่อรับรายงานเกี่ยวกับ
การดึงข้อมูล (fetch) ที่ล้มเหลว (หรือแม้แต่สำเร็จ) จากเว็บเบราว์เซอร์ที่รองรับ
🔍 Browser Detection Using the User Agent
โดยทั่วไปแล้วการตรวจจับเว็บเบราว์เซอร์โดยใช้ user agent sniffing ไม่ค่อยเป็นแนวทางที่ดี
แต่มีกรณีขอบที่จำเป็นต้องใช้งาน เอกสารนี้แนะนำวิธีการทำให้ถูกต้องที่สุด
เมื่อจำเป็นต้องใช้งาน พร้อมทั้งชี้แจงสิ่งที่ควรพิจารณาก่อนเลือกใช้วิธีนี้
⚙️ Configuring Servers for Ogg Media
คู่มือนี้ครอบคลุมการเปลี่ยนแปลงการตั้งค่าเซิร์ฟเวอร์ที่อาจจำเป็น
สำหรับให้เว็บเซิร์ฟเวอร์ของคุณสามารถให้บริการไฟล์สื่อ Ogg ได้อย่างถูกต้อง
ข้อมูลนี้อาจมีประโยชน์ในกรณีที่คุณพบสื่อประเภทอื่นที่เซิร์ฟเวอร์ของคุณยังไม่ได้ตั้งค่าให้รองรับ
🔒 Security and Privacy
🛡️ Mozilla Web Security Guidelines
ชุดคำแนะนำที่รวบรวมเคล็ดลับเพื่อช่วยทีมงานปฏิบัติการในการสร้างแอปพลิเคชันเว็บที่ปลอดภัย
📜 Permissions Policy
Permissions Policy ให้กลไกแก่นักพัฒนาเว็บในการประกาศอย่างชัดเจน
เกี่ยวกับฟังก์ชันการทำงานที่สามารถหรือไม่สามารถใช้งานบนเว็บไซต์ได้
โดยคุณสามารถกำหนด "นโยบาย" ที่จำกัด API ที่โค้ดของเว็บไซต์สามารถเข้าถึงหรือปรับเปลี่ยนพฤติกรรมเริ่มต้นของเบราว์เซอร์สำหรับคุณสมบัติบางอย่าง
🌐 Cross-Origin Resource Sharing (CORS)
การร้องขอ HTTP ข้ามโดเมนคือการร้องขอทรัพยากรจากโดเมนที่แตกต่างจากโดเมนของทรัพยากรที่ทำการร้องขอ
ในปัจจุบันหน้าเว็บมักโหลดทรัพยากรข้ามโดเมน เช่น หน้าเว็บจาก "Domain A" (http://domaina.example/)
ร้องขอรูปภาพจาก "Domain B" (http://domainb.foo/image.jpg) ผ่านแท็ก <img>
CORS ช่วยให้นักพัฒนาเว็บควบคุมวิธีที่เว็บไซต์ของตนตอบสนองต่อการร้องขอข้ามโดเมน
🚧 Content Security Policy (CSP)
CSP อนุญาตให้ผู้ดูแลเว็บไซต์ใช้ header Content-Security-Policy
เพื่อควบคุมทรัพยากรที่ client สามารถโหลดได้สำหรับหน้าเว็บที่กำหนด
คู่มือ CSP อธิบายกลไกโดยรวมของ Content Security Policy
ที่ช่วยตรวจจับและลดผลกระทบของการโจมตีบางประเภท เช่น Cross-Site Scripting (XSS)
และการโจมตีโดยฉีดข้อมูล (data injection)
🔐 Cross-Origin Resource Policy (CORP)
CORP อนุญาตให้เว็บไซต์และแอปพลิเคชันเลือกเข้าร่วมการป้องกัน
ต่อการร้องขอเฉพาะจากแหล่งที่มาอื่น (เช่น การร้องขอผ่าน <script> และ <img>)
เพื่อลดความเสี่ยงจากการโจมตีแบบ speculative side-channel
🔧 Tools & Resources
เครื่องมือและทรัพยากรที่เป็นประโยชน์ สำหรับทำความเข้าใจและแก้ไขปัญหาเกี่ยวกับ HTTP:
-
Firefox Developer Tools
มีเครื่องมือ Network Monitor ที่ช่วยวิเคราะห์การสื่อสารของ HTTP 🕵️♀️ -
HTTP Observatory
โครงการที่ออกแบบมาเพื่อช่วยนักพัฒนา, ผู้ดูแลระบบ และผู้เชี่ยวชาญด้านความปลอดภัย
ในการตั้งค่าเว็บไซต์ให้ปลอดภัยและถูกต้องตามมาตรฐาน 🔍 -
RedBot
เครื่องมือสำหรับตรวจสอบ HTTP headers ที่เกี่ยวข้องกับการแคช 📡 -
nghttp2
การนำไปใช้ในรูปแบบไคลเอนต์, เซิร์ฟเวอร์ และพร็อกซีสำหรับ HTTP/2
เขียนด้วยภาษา C พร้อมเครื่องมือทดสอบโหลดและ benchmarking
รวมถึง encoder และ decoder สำหรับ HPACK -
curl
เครื่องมือบรรทัดคำสั่งสำหรับถ่ายโอนข้อมูลตามรูปแบบ URL
รองรับโปรโตคอล HTTP, HTTPS, WS, WSS และโปรโตคอลอื่น ๆ อีกมากมาย 🔗 -
How Browsers Work (2011)
บทความที่ครอบคลุมเกี่ยวกับการทำงานภายในของเว็บเบราว์เซอร์
และการไหลของคำขอผ่านโปรโตคอล HTTP 📚
(1).302eff80.png&w=3840&q=75)