Http 简明教程
HTTP - Messages
HTTP基于客户端-服务器体系结构模型和无状态请求/响应协议,该协议通过在可靠的TCP/IP连接上交换消息来运行。
HTTP“客户端”是一个程序(Web浏览器或任何其他客户端),用于建立与服务器的连接以发送一个或多个HTTP请求消息。HTTP“服务器”是一个程序(通常是类似Apache Web服务器或Internet信息服务IIS之类的Web服务器),通过发送HTTP响应消息来接受连接以响应HTTP请求。
HTTP 使用统一资源标识符 (URI) 来标识给定资源并建立连接。一旦建立了连接, HTTP messages 将会以类似于 Internet 邮件 [RFC5322] 和多用途 Internet 邮件扩展 (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 消息中使用的每个实体。
Message Start-Line
起始行将具有以下通用语法:
start-line = Request-Line | Status-Line
在讨论 HTTP 请求和 HTTP 响应消息时,我们将分别讨论请求行和状态行。现在,让我们看请求和响应情况下的起始行示例:
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)
Header Fields
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