HTTP - ข้อความ

HTTP ขึ้นอยู่กับรูปแบบสถาปัตยกรรมไคลเอนต์เซิร์ฟเวอร์และโปรโตคอลการร้องขอ / ตอบกลับแบบไม่ระบุสถานะที่ทำงานโดยการแลกเปลี่ยนข้อความผ่านการเชื่อมต่อ TCP / IP ที่เชื่อถือได้

"ไคลเอ็นต์" HTTP คือโปรแกรม (เว็บเบราว์เซอร์หรือไคลเอนต์อื่น ๆ ) ที่สร้างการเชื่อมต่อกับเซิร์ฟเวอร์เพื่อวัตถุประสงค์ในการส่งข้อความคำขอ HTTP อย่างน้อยหนึ่งข้อความ "เซิร์ฟเวอร์" HTTP คือโปรแกรม (โดยทั่วไปคือเว็บเซิร์ฟเวอร์เช่น Apache Web Server หรือ Internet Information Services IIS เป็นต้น) ที่ยอมรับการเชื่อมต่อเพื่อให้บริการคำขอ HTTP โดยการส่งข้อความตอบกลับ HTTP

HTTP ใช้ประโยชน์จาก Uniform Resource Identifier (URI) เพื่อระบุทรัพยากรที่กำหนดและสร้างการเชื่อมต่อ เมื่อสร้างการเชื่อมต่อแล้วHTTP messagesจะถูกส่งผ่านในรูปแบบที่คล้ายคลึงกับอินเทอร์เน็ตเมล [RFC5322] และ Multipurpose Internet Mail Extensions (MIME) [RFC2045] ข้อความเหล่านี้ ได้แก่requests จากไคลเอนต์ไปยังเซิร์ฟเวอร์และ responses จากเซิร์ฟเวอร์ไปยังไคลเอนต์ซึ่งจะมีรูปแบบดังนี้

HTTP-message   = <Request> | <Response> ; HTTP/1.1 messages

คำขอ HTTP และการตอบกลับ HTTP ใช้รูปแบบข้อความทั่วไปของ RFC 822 สำหรับการถ่ายโอนข้อมูลที่ต้องการ รูปแบบข้อความทั่วไปนี้ประกอบด้วยสี่รายการต่อไปนี้

  • A Start-line
  • Zero or more header fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

ในส่วนต่อไปนี้เราจะอธิบายแต่ละเอนทิตีที่ใช้ในข้อความ HTTP

ข้อความเริ่มบรรทัด

บรรทัดเริ่มต้นจะมีไวยากรณ์ทั่วไปดังต่อไปนี้:

start-line = Request-Line | Status-Line

เราจะพูดถึง Request-Line และ Status-Line ในขณะที่คุยเรื่อง HTTP Request และ HTTP Response ตามลำดับ ในตอนนี้เรามาดูตัวอย่างของบรรทัดเริ่มต้นในกรณีของการร้องขอและการตอบกลับ:

GET /hello.htm HTTP/1.1     (This is Request-Line sent by the client)

HTTP/1.1 200 OK             (This is Status-Line sent by the server)

ฟิลด์ส่วนหัว

ฟิลด์ส่วนหัว HTTP ให้ข้อมูลที่จำเป็นเกี่ยวกับคำขอหรือการตอบกลับหรือเกี่ยวกับออบเจ็กต์ที่ส่งในเนื้อหาข้อความ ส่วนหัวข้อความ HTTP มีสี่ประเภท:

  • General-header: ช่องส่วนหัวเหล่านี้มีการบังคับใช้ทั่วไปสำหรับทั้งข้อความร้องขอและข้อความตอบกลับ

  • Request-header: ช่องส่วนหัวเหล่านี้มีผลบังคับใช้กับข้อความร้องขอเท่านั้น

  • Response-header: ช่องส่วนหัวเหล่านี้มีผลบังคับใช้กับข้อความตอบกลับเท่านั้น

  • Entity-header: ฟิลด์ส่วนหัวเหล่านี้กำหนดข้อมูลเมตาเกี่ยวกับเอนทิตี - ร่างกายหรือหากไม่มีเนื้อหาเกี่ยวกับทรัพยากรที่ร้องขอ

ส่วนหัวที่กล่าวถึงข้างต้นทั้งหมดเป็นไปตามรูปแบบทั่วไปเดียวกันและแต่ละฟิลด์ส่วนหัวประกอบด้วยชื่อตามด้วยเครื่องหมายจุดคู่ (:) และค่าฟิลด์ดังนี้:

message-header = field-name ":" [ field-value ]

ต่อไปนี้เป็นตัวอย่างของฟิลด์ส่วนหัวต่างๆ:

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

เนื้อหาข้อความ

ส่วนเนื้อหาของข้อความเป็นทางเลือกสำหรับข้อความ HTTP แต่ถ้าพร้อมใช้งานจะใช้เพื่อดำเนินการเนื้อหาเอนทิตีที่เกี่ยวข้องกับคำขอหรือการตอบ หากมีการเชื่อมโยงร่างกายของเอนทิตีโดยปกติแล้วContent-Type และ Content-Length บรรทัดส่วนหัวระบุลักษณะของเนื้อหาที่เกี่ยวข้อง

เนื้อหาข้อความคือเนื้อหาที่มีข้อมูลคำขอ HTTP จริง (รวมถึงข้อมูลแบบฟอร์มและอัปโหลด ฯลฯ ) และข้อมูลตอบกลับ HTTP จากเซิร์ฟเวอร์ (รวมถึงไฟล์รูปภาพ ฯลฯ ) ด้านล่างนี้เป็นเนื้อหาง่ายๆของเนื้อหาข้อความ:

<html>
   <body>
   
      <h1>Hello, World!</h1>
   
   </body>
</html>

สองบทถัดไปจะใช้ประโยชน์จากแนวคิดที่อธิบายไว้ข้างต้นเพื่อเตรียมคำขอ HTTP และการตอบสนองของ HTTP