HTTP - Tin nhắn

HTTP dựa trên mô hình kiến ​​trúc máy khách-máy chủ và một giao thức yêu cầu / phản hồi không trạng thái hoạt động bằng cách trao đổi thông điệp qua kết nối TCP / IP đáng tin cậy.

"Máy khách" HTTP là một chương trình (trình duyệt Web hoặc bất kỳ máy khách nào khác) thiết lập kết nối với máy chủ nhằm mục đích gửi một hoặc nhiều thông báo yêu cầu HTTP. "Máy chủ" HTTP là một chương trình (nói chung là một máy chủ web như Apache Web Server hoặc Internet Information Services IIS, v.v.) chấp nhận các kết nối để phục vụ các yêu cầu HTTP bằng cách gửi các thông báo phản hồi HTTP.

HTTP sử dụng Mã định danh tài nguyên đồng nhất (URI) để xác định một tài nguyên nhất định và thiết lập kết nối. Sau khi kết nối được thiết lập,HTTP messagesđược chuyển theo định dạng tương tự như định dạng được sử dụng bởi thư Internet [RFC5322] và Tiện ích mở rộng thư Internet đa năng (MIME) [RFC2045]. Những thông điệp này bao gồmrequests từ máy khách đến máy chủ và responses từ máy chủ đến máy khách sẽ có định dạng sau:

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

Yêu cầu HTTP và phản hồi HTTP sử dụng định dạng thông báo chung của RFC 822 để truyền dữ liệu cần thiết. Định dạng thông báo chung này bao gồm bốn mục sau.

  • 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

Trong các phần sau, chúng tôi sẽ giải thích từng thực thể được sử dụng trong một thông điệp HTTP.

Dòng bắt đầu tin nhắn

Dòng bắt đầu sẽ có cú pháp chung sau:

start-line = Request-Line | Status-Line

Chúng ta sẽ thảo luận về Dòng yêu cầu và Dòng trạng thái trong khi thảo luận về các thông báo HTTP Request và HTTP Response tương ứng. Bây giờ, hãy xem các ví dụ về dòng bắt đầu trong trường hợp yêu cầu và phản hồi:

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)

Trường tiêu đề

Các trường tiêu đề HTTP cung cấp thông tin bắt buộc về yêu cầu hoặc phản hồi hoặc về đối tượng được gửi trong nội dung thư. Có bốn loại tiêu đề thư HTTP:

  • General-header: Các trường tiêu đề này có khả năng áp dụng chung cho cả thông báo yêu cầu và phản hồi.

  • Request-header: Các trường tiêu đề này chỉ có thể áp dụng cho các thông báo yêu cầu.

  • Response-header: Các trường tiêu đề này chỉ có thể áp dụng cho các thông báo phản hồi.

  • Entity-header: Các trường tiêu đề này xác định thông tin meta về phần thân thực thể hoặc, nếu không có phần thân nào, về tài nguyên được xác định bởi yêu cầu.

Tất cả các tiêu đề được đề cập ở trên đều tuân theo cùng một định dạng chung và mỗi trường tiêu đề bao gồm một tên theo sau bởi dấu hai chấm (:) và giá trị trường như sau:

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

Sau đây là các ví dụ về các trường tiêu đề khác nhau:

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

Nội dung Thư

Phần nội dung thông báo là tùy chọn đối với thông báo HTTP nhưng nếu nó có sẵn, thì nó được sử dụng để mang phần thân thực thể được liên kết với yêu cầu hoặc phản hồi. Nếu phần thân thực thể được liên kết, thì thườngContent-TypeContent-Length dòng tiêu đề chỉ định bản chất của phần nội dung được liên kết.

Nội dung thư là phần chứa dữ liệu yêu cầu HTTP thực tế (bao gồm dữ liệu biểu mẫu và dữ liệu được tải lên, v.v.) và dữ liệu phản hồi HTTP từ máy chủ (bao gồm tệp, hình ảnh, v.v.). Dưới đây là nội dung đơn giản của nội dung thư:

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

Hai chương tiếp theo sẽ sử dụng các khái niệm đã giải thích ở trên để chuẩn bị các Yêu cầu HTTP và Phản hồi HTTP.