HTTP基于客户端 - 服务器体系结构模型和无状态请求/响应协议,该协议通过可靠的TCP/IP连接交换消息来运行.
HTTP"客户端"是程序(Web浏览器或任何其他客户端),用于建立与服务器的连接,以便发送一个或多个HTTP请求消息. HTTP"服务器"是一个程序(通常是Web服务器,如Apache Web服务器或Internet信息服务IIS等),它接受连接以通过发送HTTP响应消息来提供HTTP请求.
HTTP利用统一资源标识符(URI)来标识给定资源并建立连接.建立连接后, HTTP消息将以
格式传递,类似于Internet邮件[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]所使用的格式.这些消息包括从客户端到服务器的请求和从服务器到客户端的响应,其格式如下:
HTTP-message =| ; HTTP/1.1 messages
HTTP请求和HTTP响应使用RFC 822的通用消息格式来传输所需的数据.此通用消息格式包含以下四个项目.
A Start-lineZero or more header fields followed by CRLFAn empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fieldsOptionally a message-body
在以下部分中,我们将解释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邮件标头:
General-header:这些标题字段包含请求和响应消息的一般适用性.
请求标头:这些标头字段仅适用于请求消息.
Response-header:这些标题字段仅适用于回复消息.
实体标题:这些标题字段定义关于实体主体的元信息,如果没有主体,则定义关于请求标识的资源.
所有上述标题都遵循相同的通用格式,每个标题字段由一个名称后跟一个冒号(:)组成和字段值如下:
message-header = field-name ":" [ field-value ]
以下是各种标题字段的示例:
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Host: www.example.comAccept-Language: en, miDate: Mon, 27 Jul 2009 12:28:53 GMTServer: ApacheLast-Modified: Wed, 22 Jul 2009 19:15:56 GMTETag: "34aa387-d-1568eb00"Accept-Ranges: bytesContent-Length: 51Vary: Accept-EncodingContent-Type: text/plain
消息正文
消息正文部分对于HTTP消息是可选的,但如果它可用,那么它用于携带与请求或响应关联的实体主体.如果实体主体是关联的,那么通常 Content-Type 和 Content-Length 标题行指定相关主体的性质.
消息体是承载来自服务器的实际HTTP请求数据(包括表单数据和上载等)和HTTP响应数据(包括文件,图像等)的消息体.下面显示的是邮件正文的简单内容:
Hello, World!
接下来的两章将利用上面解释的概念来准备HTTP请求和HTTP响应.