加密与安全通信
HTTP 头部 (HTTP Header)
约 5 分钟阅读
最后更新: 2026-04-18
什么是 HTTP 头部
HTTP 头部 (HTTP Header) 是客户端 (浏览器) 与服务器在 HTTP 通信过程中,与正文 (Body) 分开传输的元数据信息。请求头部从客户端发送到服务器,响应头部从服务器返回给客户端。
头部采用「名称: 值」的格式,传递内容类型、缓存行为、认证凭据和安全策略等各种通信附带信息。对 Web 开发者而言,理解 HTTP 头部是必备技能,尤其是安全相关头部的正确配置构成了网站防御的基础。
请求头部与响应头部
HTTP 头部按传输方向大致分为两类。
请求头部
由客户端发送给服务器。包括
User-Agent (浏览器类型)、Accept (可接受的内容类型)、Authorization (认证令牌)、Cookie (已保存的 Cookie 信息) 等。服务器根据这些信息优化响应内容。响应头部
由服务器返回给客户端。包括
Content-Type (MIME 类型)、Set-Cookie (Cookie 设置指令)、Cache-Control (缓存策略) 以及各种安全头部。此外,还有请求和响应双方都使用的通用头部 (Date、Connection 等) 和描述正文属性的实体头部 (Content-Length、Content-Encoding 等)。
安全相关头部
在响应头部中,控制浏览器安全功能的安全头部是 Web 网站防御的核心。
- Content-Security-Policy (CSP): 控制页面可以加载资源的来源。是缓解 XSS 攻击最强大的安全头部。
- Strict-Transport-Security (HSTS): 指示浏览器后续访问仅使用 HTTPS。防止 HTTP 降级攻击。
- X-Frame-Options: 控制页面是否可以被嵌入
<iframe>。作为点击劫持的防御措施。设置为DENY(完全拒绝) 或SAMEORIGIN(仅允许同源)。CSP 的frame-ancestors指令是其后继者,但为了向后兼容建议同时使用。 - X-Content-Type-Options: 设置
nosniff可禁用浏览器的 MIME 类型嗅探,防止浏览器以不同于服务器指定的Content-Type来解释内容。
这些头部不仅各自独立发挥作用,组合使用还能构建纵深防御体系。即使一个头部被绕过,其他头部仍能阻止攻击。
缓存控制头部
缓存控制头部指定浏览器和 CDN 保留响应的时长。正确的配置同时影响性能和安全性。
Cache-Control: 最重要的缓存头部。组合使用max-age=3600(缓存 1 小时)、no-cache(每次向服务器验证)、no-store(完全不缓存) 等指令。包含认证信息的页面应使用no-store, private。ETag: 标识资源特定版本的哈希值。浏览器在后续请求中通过If-None-Match发送 ETag,如果资源未变更,服务器返回304 Not Modified,节省带宽。Last-Modified/If-Modified-Since: 基于最后修改时间的条件请求。与 ETag 类似可节省带宽,但精度仅到秒级,建议与 ETag 配合使用。
常见策略是对静态资源 (CSS、JS、图片) 使用较长的 max-age 并在文件名中包含哈希值,对 HTML 页面使用 no-cache 配合 ETag 验证。
隐私相关头部
随着隐私意识的提升,控制用户追踪和数据收集的头部日益重要。
Referrer-Policy: 控制页面跳转时发送的Referer头部内容。推荐设置为strict-origin-when-cross-origin(跨域时仅发送源)。防止用户浏览历史泄露给外部网站。Permissions-Policy: 控制对浏览器功能 (摄像头、麦克风、地理位置、加速度传感器等) 的访问。明确禁用不需要的功能可防止恶意脚本滥用设备功能。前身为Feature-Policy。- 跨域头部群:
Cross-Origin-Opener-Policy(COOP)、Cross-Origin-Embedder-Policy(COEP)、Cross-Origin-Resource-Policy(CORP) 控制跨域资源共享和窗口引用。作为 Spectre 攻击的缓解措施而引入。
正确组合安全头部和隐私头部,可以在保护用户数据的同时最小化攻击面。
常见误解
- HTTP 头部只有服务器管理员需要关心
- 前端开发者同样需要理解 HTTP 头部。排查 CORS 错误、设计缓存策略、引入 CSP 等日常开发工作都需要头部知识。养成在浏览器开发者工具中检查头部的习惯非常重要。
- 设置了安全头部就能消除所有漏洞
- 安全头部是纵深防御的一层,不能替代修复应用程序本身的漏洞 (如输入验证缺陷、认证缺陷等)。头部通过控制浏览器行为来减轻攻击影响,只有与根本性的漏洞修复配合使用才能发挥最大效果。
分享