前言
每当我们发起一个网络请求时,浏览器都会自动或手动地构建一份“请求报文”。理解这份报文的结构,不仅能帮助我们更好地调试接口,更是深入理解 HTTP 协议、缓存机制及安全策略的关键。
一、 请求报文的结构
HTTP 请求报文由三个部分组成:请求行、请求头、请求体。
-
请求行 (Request Line) :
- 包含:请求方法(GET/POST/DELETE 等)、URL 路径、协议版本(HTTP/1.1 等)。
-
请求头 (Request Headers) :
- 由一系列
Key: Value键值对组成,用于传递元数据。
- 由一系列
-
请求体 (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... |