SuperJane website logo
HTTP

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 📚