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