📅  最后修改于: 2020-12-14 05:20:02             🧑  作者: Mango
HTTP基于客户端-服务器体系结构模型和无状态请求/响应协议,该协议通过在可靠的TCP / IP连接上交换消息来运行。
HTTP“客户端”是一种程序(Web浏览器或任何其他客户端),该程序建立与服务器的连接以发送一个或多个HTTP请求消息。 HTTP“服务器”是程序(通常是Web服务器,例如Apache Web Server或Internet Information Services IIS等),它接受连接以便通过发送HTTP响应消息来服务HTTP请求。
HTTP使用统一资源标识符(URI)来标识给定资源并建立连接。建立连接后,将以与Internet邮件[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]相似的格式传递HTTP消息。这些消息包括客户端到服务器的请求以及服务器到客户端的响应,格式如下:
HTTP-message = | ; HTTP/1.1 messages
HTTP请求和HTTP响应使用RFC 822的通用消息格式来传输所需的数据。此通用消息格式由以下四项组成。
在以下各节中,我们将解释HTTP消息中使用的每个实体。
起始行将具有以下通用语法:
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)
HTTP标头字段提供有关请求或响应或消息正文中发送的对象的必需信息。 HTTP消息头有四种类型:
通用标头:这些标头字段对请求和响应消息均具有通用性。
请求标头:这些标头字段仅适用于请求消息。
响应头:这些头字段仅适用于响应消息。
实体标头:这些标头字段定义有关实体主体的元信息,如果没有主体,则定义有关请求标识的资源的元信息。
上面提到的所有报头遵循相同的通用格式和每个所述报头字段的包含名称后跟冒号的(:)和字段值,如下所示:
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响应数据(包括文件,图像等)的消息主体。下面显示的是消息正文的简单内容:
Hello, World!
接下来的两章将利用以上解释的概念来准备HTTP请求和HTTP响应。