HTTP-深度拆解 HTTP 请求报文

38 阅读2分钟

前言

每当我们发起一个网络请求时,浏览器都会自动或手动地构建一份“请求报文”。理解这份报文的结构,不仅能帮助我们更好地调试接口,更是深入理解 HTTP 协议、缓存机制及安全策略的关键。

一、 请求报文的结构

HTTP 请求报文由三个部分组成:请求行请求头请求体

  1. 请求行 (Request Line)

    • 包含:请求方法(GET/POST/DELETE 等)、URL 路径协议版本(HTTP/1.1 等)。
  2. 请求头 (Request Headers)

    • 由一系列 Key: Value 键值对组成,用于传递元数据。
  3. 请求体 (Request Body)

    • 客户端发给服务器的数据(如 JSON、表单)。注意:GET 请求通常没有请求体。

二、 核心请求头字段详解

为了方便记忆,我们将请求头按功能分为四大类:

1. 内容协商与编码 (Content Negotiation)

这类字段告诉服务器:客户端“期望”收到什么样的资源。

  • Accept:告知服务器客户端能处理的 MIME 类型(如 text/html, application/json)。

  • Accept-Encoding:支持的压缩算法。

    • gzip / deflate:经典的压缩算法。
    • br:Google 开发的 Brotli 算法,压缩率更高。
  • Accept-Language:首选语言(如 zh-CN 简体中文,en-US 美国英语)。

2. 缓存控制 (Caching) —— 面试重灾区

  • Cache-Control:强缓存的核心指令。

    • max-age:资源有效期。
    • no-cache:需先去服务器进行协商缓存验证。
    • no-store:彻底不缓存。
  • Pragma:HTTP/1.0 的遗留产物,功能类似 no-cache,优先级低于 Cache-Control。

3. 安全与身份验证 (Security)

  • Authorization:携带身份验证凭据(如 Bearer Token)。
  • Cookie:自动携带本地存储的凭据。
  • Origin:标记请求发起的源(协议+域名+端口),主要用于跨域(CORS)校验。
  • User-Agent:客户端“身份证”,包含浏览器内核、版本等信息。

4. 网络策略与元数据

  • Host:目标服务器的主机名和端口(HTTP/1.1 强制要求)。
  • Connection:控制连接状态(keep-alive 持久连接,close 立即关闭)。
  • Sec-Fetch-*:新型安全字段,用于指示请求模式(如 cors, no-cors)和来源关系(如 same-site),防御 CSRF 等攻击。

三、 常见 Header 字段速查表

字段名核心作用典型取值
Host指定目标域名juejin.cn
Connection连接管理keep-alive
Accept期待返回类型application/json
Cache-Control强缓存策略max-age=3600
Origin跨域来源https://example.com
User-Agent浏览器指纹Mozilla/5.0...

四、 请求报文示例:

image.png