目录


目录

http 请求报文的组成

HTTP 请求报文是由客户端(例如,浏览器)发送到服务器的,请求特定的资源或执行特定的操作。HTTP 请求报文主要由以下几部分组成:

  1. 请求行(Start line):

    • 方法: 常见的 HTTP 方法有 GET, POST, PUT, DELETE, HEAD, OPTIONS 等。
    • URI: 请求的资源的统一资源标识符。
    • HTTP 版本: 例如 HTTP/1.1HTTP/2.

    示例:

    GET /index.html HTTP/1.1
    
  2. 请求头部(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 请求头部及其简要描述:

    1. Host: 指定请求的目标域名或IP地址和端口号。

      • 例如:Host: www.example.com
    2. 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
    3. Accept: 通知服务器客户端可以处理的媒体类型。

      • 例如:Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8
    4. Accept-Encoding: 告诉服务器客户端支持哪些内容编码。

      • 例如:Accept-Encoding: gzip, deflate, br
    5. Accept-Language: 告诉服务器客户端的首选语言。

      • 例如:Accept-Language: en-US,en;q=0.9
    6. Connection: 控制客户端和服务器之间的网络连接的行为。

      • 例如:Connection: keep-alive
    7. Authorization: 包含用于验证客户端请求的凭据。

      • 例如:Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
    8. Cache-Control: 指示请求/响应链中的所有缓存如何处理该消息。

      • 例如:Cache-Control: no-cache
    9. Content-Length: 请求体的长度,以八位字节为单位。

      • 例如:Content-Length: 348
    10. Content-Type: 请求体的媒体类型。

      • 例如:Content-Type: application/x-www-form-urlencoded
    11. Cookie: 包含服务器之前设置的HTTP cookie。

      • 例如:Cookie: name=value; anothername=anothervalue
    12. Referer: 提供发送请求的页面的URI。

      • 例如:Referer: http://www.example.com
    13. Upgrade-Insecure-Requests: 告诉服务器客户端希望通过HTTPS进行操作。

      • 例如:Upgrade-Insecure-Requests: 1

    这些只是请求头中的一部分,实际上还有很多其他的请求头,可用于多种目的。一些是标准的、广泛使用的,而另一些则可能是特定于某些应用或服务的。

  3. 空行: 分隔请求头和请求体的空行。

  4. 请求体(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 方法、目标、头部和其他因素而异。