HTTP是无状态请求/响应协议,通过在可靠的传输层或会话层“connection(连接)”(第6节)上交换消息(第3节)来进行操作。一个HTTP“client(客户端)”是一个为了发送一个或多个HTTP请求而与服务器建立连接的程序。一个HTTP“server(服务器)”是一个接受连接通过发送HTTP响应来服务HTTP请求的程序。

术语“client”和“server”只表示这些程序在特定连接中扮演的角色。同一个程序可能在一些连接中扮演client,而在其他连接中扮演server。术语“user agent(用户代理)”指任何发起请求的客户端程序,包括(但不限于)浏览器,爬虫(网络机器人),命令行工具,定制应用和移动应用。术语“origin server(源服务器)”指能够对给定目标的资源建立权威应答的程序。术语“sender(发送者)”和“recipient(接收者)”分别指发送或接收给定消息的任何实现。

HTTP依靠统一资源标识符(URI)标准来标明目标资源(5.1节)和资源之间的关系。消息的传递格式与Internet邮件[RFC5322]和多用途Internet邮件扩展(MIME)所使用的格式相似(有关HTTP和MIME消息之间的差异,请参阅[RFC7231]的附录A.)。

大多数HTTP通信包括用于表示由URI标识的一些资源的检索请求(GET)。在最简单的情况下可以通过一个在user agent(UA)和origin server (o)的双向连接来实现

    request >
UA ======================================= O
                               < response

一个client以一个请求消息的格式发送HTTP请求到一个server,以一个请求行开始,包括一个方法、URI和协议版本(3.1.1节)。接着是header域包括了请求修饰符、客户端信息和表示元信息(3.2节),一个空行表示结束后header部分,最后一个消息体包含了body(如果存在的话,3.3节)。

一个服务器通过发送一个或多个HTTP响应消息来响应客户端的一个请求。每个HTTP响应消息都已包含协议版本,成功或错误代码和文本原因短语(3.1.2节)的状态行开始,后面可能跟头字段包含服务器信息、资源元数据和表示元数据(3.2节),一个表示包头部分结束的空行,最后是包含有效载荷主体(如果由的话,3.3节)的消息主体。

一个连接可能用于多个请求/响应交互,这定义在6.3节。

下面的例子说明了一个对URI为 “http://www.example.com/hello.txt” 的GET请求(RFC7231的4.3.1节)的一个典型的消息交换:

客户端请求:

GET /hello.txt HTTP/1.1
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

服务器响应:

HTTP/1.1 200 OK
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

Hello World! My payload includes a trailing CRLF.

results matching ""

    No results matching ""