http 请求报文的组成
HTTP 请求报文是由客户端(例如,浏览器)发送到服务器的,请求特定的资源或执行特定的操作。HTTP 请求报文主要由以下几部分组成:
-
请求行(Start line):
- 方法: 常见的 HTTP 方法有
GET
,POST
,PUT
,DELETE
,HEAD
,OPTIONS
等。 - URI: 请求的资源的统一资源标识符。
- HTTP 版本: 例如
HTTP/1.1
或HTTP/2
.
示例:
GET /index.html HTTP/1.1
- 方法: 常见的 HTTP 方法有
-
请求头部(Headers): 这是键值对的集合,提供有关请求的额外信息。常见的请求头有:
Host
: 请求的目标域名。User-Agent
: 发起请求的客户端信息,如浏览器版本。Accept
: 客户端可以处理的媒体类型。Accept-Encoding
: 客户端可以处理的内容编码(例如gzip
)。Connection
: 控制代理服务器或客户端与服务器之间的连接管理,例如keep-alive
.Authorization
: 用于身份验证的凭据。- …等等。
示例:
Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html
HTTP 请求头部(Headers)是请求报文中的关键部分,用于提供有关请求或有关发送请求的客户端/浏览器的信息。请求头是键值对的形式,并用于各种目的,从定义资源的元数据到身份验证和请求内容的特性。
以下是一些常见的 HTTP 请求头部及其简要描述:
-
Host
: 指定请求的目标域名或IP地址和端口号。- 例如:
Host: www.example.com
- 例如:
-
User-Agent
: 描述发起请求的客户端软件的名称和版本。这通常用于识别访问站点的浏览器和设备。- 例如:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
- 例如:
-
Accept
: 通知服务器客户端可以处理的媒体类型。- 例如:
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8
- 例如:
-
Accept-Encoding
: 告诉服务器客户端支持哪些内容编码。- 例如:
Accept-Encoding: gzip, deflate, br
- 例如:
-
Accept-Language
: 告诉服务器客户端的首选语言。- 例如:
Accept-Language: en-US,en;q=0.9
- 例如:
-
Connection
: 控制客户端和服务器之间的网络连接的行为。- 例如:
Connection: keep-alive
- 例如:
-
Authorization
: 包含用于验证客户端请求的凭据。- 例如:
Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
- 例如:
-
Cache-Control
: 指示请求/响应链中的所有缓存如何处理该消息。- 例如:
Cache-Control: no-cache
- 例如:
-
Content-Length
: 请求体的长度,以八位字节为单位。- 例如:
Content-Length: 348
- 例如:
-
Content-Type
: 请求体的媒体类型。- 例如:
Content-Type: application/x-www-form-urlencoded
- 例如:
-
Cookie
: 包含服务器之前设置的HTTP cookie。- 例如:
Cookie: name=value; anothername=anothervalue
- 例如:
-
Referer
: 提供发送请求的页面的URI。- 例如:
Referer: http://www.example.com
- 例如:
-
Upgrade-Insecure-Requests
: 告诉服务器客户端希望通过HTTPS进行操作。- 例如:
Upgrade-Insecure-Requests: 1
- 例如:
这些只是请求头中的一部分,实际上还有很多其他的请求头,可用于多种目的。一些是标准的、广泛使用的,而另一些则可能是特定于某些应用或服务的。
-
空行: 分隔请求头和请求体的空行。
-
请求体(Body): 不是所有的 HTTP 请求都有请求体。例如,
GET
请求通常没有请求体,但POST
请求可能有。请求体包含发送到服务器的数据,例如提交的表单数据或 JSON 数据。示例:
username=john&password=secret
整个 HTTP 请求报文示例:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
在这个例子中,我们发送一个 GET
请求到 www.example.com
上的 /index.html
资源,没有请求体。
要注意的是,HTTP 请求的具体结构和包含的信息可能会根据使用的 HTTP 方法、目标、头部和其他因素而异。