加密与安全通信

HTTP 头部 (HTTP Header)

约 5 分钟阅读

什么是 HTTP 头部

HTTP 头部 (HTTP Header) 是客户端 (浏览器) 与服务器在 HTTP 通信过程中,与正文 (Body) 分开传输的元数据信息。请求头部从客户端发送到服务器,响应头部从服务器返回给客户端。

头部采用「名称: 值」的格式,传递内容类型、缓存行为、认证凭据和安全策略等各种通信附带信息。对 Web 开发者而言,理解 HTTP 头部是必备技能,尤其是安全相关头部的正确配置构成了网站防御的基础。

请求头部与响应头部

HTTP 头部按传输方向大致分为两类。

请求头部
由客户端发送给服务器。包括 User-Agent (浏览器类型)、Accept (可接受的内容类型)、Authorization (认证令牌)、Cookie (已保存的 Cookie 信息) 等。服务器根据这些信息优化响应内容。
响应头部
由服务器返回给客户端。包括 Content-Type (MIME 类型)、Set-Cookie (Cookie 设置指令)、Cache-Control (缓存策略) 以及各种安全头部。

此外,还有请求和响应双方都使用的通用头部 (DateConnection 等) 和描述正文属性的实体头部 (Content-LengthContent-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 等日常开发工作都需要头部知识。养成在浏览器开发者工具中检查头部的习惯非常重要。
设置了安全头部就能消除所有漏洞
安全头部是纵深防御的一层,不能替代修复应用程序本身的漏洞 (如输入验证缺陷、认证缺陷等)。头部通过控制浏览器行为来减轻攻击影响,只有与根本性的漏洞修复配合使用才能发挥最大效果。
分享

相关术语