http请求消息头怎么用?http请求头详解
- 云服务器
- 2026-07-07
- 7
HTTP 请求消息头(Request Headers)是客户端向服务器发送请求时附带的关键元数据,它们不直接包含请求的主体内容(如表单数据或 JSON 负载),而是描述了请求的上下文、客户端的能力、认证信息以及期望的响应格式,正确理解和应用这些头部字段,对于优化 Web 性能、增强安全性以及实现跨域通信至关重要。
身份认证与授权:确保访问安全
在现代 Web 应用中,身份验证是首要任务,HTTP 头部提供了多种机制来验证用户身份,从基础的 Basic Auth 到更安全的 Bearer Token。
应用场景示例:使用 Bearer Token 进行 API 访问控制
当用户登录后,服务器会返回一个 JWT(JSON Web Token),后续所有 API 请求都需要在头部携带此 Token,以证明用户已登录且拥有相应权限。
| 头部字段 | 示例值 | 说明 |
|---|---|---|
| Authorization | Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... | 使用 Bearer 方案传递 JWT 令牌,服务器解析该令牌以验证用户身份。 |
| Cookie | session_id=abc123xyz; user_pref=dark_mode | 传统会话管理方式,通过 Cookie 传递会话 ID。 |
代码片段(JavaScript Fetch API):
fetch('https://api.example.com/user/profile', { method: 'GET', headers: { 'Authorization': 'Bearer ' + userToken, 'Accept': 'application/json' } }) .then(response => response.json()) .then(data => console.log(data));
内容协商:优化资源传输效率
协商(Content Negotiation)允许客户端告知服务器它偏好何种格式、语言或编码的资源,从而让服务器返回最合适的响应,这不仅提升了用户体验,还减少了带宽消耗。
应用场景示例:移动端适配与语言本地化
假设一个新闻网站需要向不同地区的用户推送本地化内容,并根据设备类型优化图片质量。

| 头部字段 | 示例值 | 说明 |
|---|---|---|
| Accept-Language | zh-CN,zh;q=0.9,en;q=0.8 | 告诉服务器优先返回简体中文内容,其次是中文,最后是英语。 |
| Accept-Encoding | gzip, deflate, br | 告诉服务器支持 gzip、deflate 和 Brotli 压缩算法,服务器会选择最优压缩方式返回数据,减少传输体积。 |
| User-Agent | Mozilla/5.0 (iPhone; CPU iPhone OS 14_0...) | 标识客户端设备类型,服务器可根据此头部返回适配移动端布局的 HTML 或压缩后的图片。 |
逻辑流程:
- 客户端发送请求,携带 Accept-Language: zh-CN。
- 服务器检测到该头部,查找数据库中对应的中文版本文章。
- 服务器检查 Accept-Encoding,发现客户端支持 br(Brotli),于是对 JSON 响应进行 Brotli 压缩。
- 服务器返回压缩后的中文 JSON 数据,并附带 Content-Encoding: br 头部。
跨域资源共享(CORS):打破同源策略限制
由于浏览器的同源策略限制,前端页面只能访问与自身协议、域名、端口相同的资源,CORS 机制通过特定的请求和响应头部,允许服务器明确指定哪些外部源可以访问其资源。
应用场景示例:前端 React 应用调用后端 Node.js API
当前端部署在 http://localhost:3000,而后端 API 部署在 http://api.example.com:8080 时,浏览器会先发送一个预检请求(Preflight Request)。
预检请求(OPTIONS)头部示例:
| 头部字段 | 示例值 | 说明 |
|---|---|---|
| Origin | http://localhost:3000 | 标识发起请求的源,服务器据此判断是否允许跨域。 |
| Access-Control-Request-Method | POST | 告知服务器实际请求将使用的方法。 |
| Access-Control-Request-Headers | Content-Type, Authorization | 告知服务器实际请求将携带的自定义头部。 |
服务器响应头部(关键部分):

| 头部字段 | 示例值 | 说明 |
|---|---|---|
| Access-Control-Allow-Origin | http://localhost:3000 | 明确允许该源访问资源,若设为 则允许所有源(不安全)。 |
| Access-Control-Allow-Methods | GET, POST, PUT, DELETE | 允许的 HTTP 方法列表。 |
| Access-Control-Allow-Headers |
Content-Type, Authorization | 允许的自定义头部列表。 |
缓存控制:提升加载速度与降低服务器负载
HTTP 缓存头部允许客户端和中间代理(如 CDN)缓存资源,避免重复请求,合理配置缓存头部可以显著减少网络延迟和服务器压力。
应用场景示例:静态资源(CSS/JS/图片)与动态数据的差异化缓存策略
| 头部字段 | 示例值 | 适用场景 | 说明 |
|---|---|---|---|
| Cache-Control | public, max-age=31536000 | 静态资源(如 logo.png, app.js) | 允许公共缓存,有效期为 1 年,文件名通常包含哈希值,内容变更时文件名也会变,因此可长期缓存。 |
| Cache-Control | no-cache | 动态 API 数据(如用户信息) | 不强制缓存,但允许缓存,每次请求前需向服务器验证资源是否过期(使用 ETag/Last-Modified)。 |
| Cache-Control | no-store | 敏感数据(如银行余额) | 完全禁止缓存,确保每次请求都从服务器获取最新数据。 |
| If-None-Match | "w/"xyz" | 客户端发起验证请求 | 客户端携带上次收到的 ETag,服务器比较后若资源未变,返回 304 Not Modified,节省带宽。 |
最佳实践建议:
- 静态资源:使用 Cache-Control: public, max-age=31536000, immutable,并结合文件名哈希。
- HTML 文档:通常使用 no-cache 或较短的 max-age,确保用户能获取最新的页面结构。
- API 响应:根据数据更新频率设置 max-age,对于实时性要求高的数据使用 no-store。
安全增强:防御常见 Web 攻破
除了功能性的头部,还有一些头部专门用于增强安全性,帮助防御 XSS(跨站脚本攻破)、点击截持等常见威胁。

| 头部字段 | 示例值 | 安全作用 |
|---|---|---|
| Content-Security-Policy | default-src 'self'; script-src 'self' https://trusted.cdn.com |
CSP 限制页面可以加载哪些资源,有效防止 XSS 攻破。 |
| X-Content-Type-Options | nosniff | 防止浏览器进行 MIME 类型嗅探,确保服务器声明的内容类型被严格遵守。 |
| X-Frame-Options | DENY 或 SAMEORIGIN | 防止网站被嵌入到 iframe 中,抵御点击截持攻破。 |
| Strict-Transport-Security | max-age=31536000; includeSubDomains | HSTS 强制浏览器通过 HTTPS 连接,防止中间人攻破和 SSL 剥离攻破。 |