· 12 min read
HTTP headers are the unsung heroes of web communication. Every time you load a webpage, stream a video, or submit
HTTP 头部是网络通信中的无名英雄。每次你加载网页、播放视频或提交表单时,都有数十个头部在幕后工作以实现这一切。它们携带关于请求和响应的关键元数据,控制缓存行为,执行安全策略,并启用现代 Web 功能。
理解 HTTP 头部不再只是后端开发人员的事。前端工程师需要它们来进行 API 集成,DevOps 团队依赖它们进行性能优化,安全专业人员使用它们来保护应用程序免受攻击。本指南详细介绍了关于 HTTP 头部你需要知道的一切,从基本概念到高级安全实现。
HTTP 头部是在 HTTP 通信期间在客户端和服务器之间发送的键值对。它们提供关于请求或响应的基本上下文,包括内容类型、编码、身份验证凭据、缓存指令和安全策略。
头部遵循简单的格式:Header-Name: value。每个头部出现在自己的行上,空行将头部与消息正文分隔开。虽然 HTTP/1.1 使用纯文本头部,但 HTTP/2 和 HTTP/3 分别使用 HPACK 和 QPACK 算法对其进行压缩。
头部分为四个主要类别:
现代 Web 应用程序通常在每个请求-响应周期中交换 20-40 个头部。有些是强制性的(如 HTTP/1.1 中的 Host),而其他的是可选的,但强烈建议用于安全性和性能。
专业提示:使用浏览器的 DevTools 网络选项卡实时检查头部。这对于调试 API 问题和了解第三方服务如何与你的应用程序通信非常有价值。
请求头部告诉服务器客户端想要什么以及它能处理什么。它们包括关于接受的内容类型、首选语言、身份验证凭据和客户端功能的信息。
以下是你会遇到的最重要的请求头部:
| 头部 | 用途 | 示例 |
|---|---|---|
Host |
指定服务器的域名 | Host: example.com |
User-Agent |
标识客户端软件 | User-Agent: Mozilla/5.0... |
Accept |
客户端可以处理的媒体类型 | Accept: application/json |
Accept-Language |
响应的首选语言 | Accept-Language: en-US,en;q=0.9 |
Accept-Encoding |
支持的压缩算法 | Accept-Encoding: gzip, br |
Authorization |
身份验证凭据 | Authorization: Bearer token123 |
Cookie |
域的存储 cookie | Cookie: session=abc123 |
Referer |
上一页的 URL | Referer: https://google.com |
Accept 头部使用质量值(q 值)来指示当多种格式可接受时的偏好。值的范围从 0 到 1,1 是最高优先级:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
这告诉服务器:"我更喜欢 HTML 或 XHTML,但我会以 90% 的偏好接受 XML,以 80% 的偏好接受其他任何内容。"服务器使用这个来执行内容协商并返回最合适的格式。
User-Agent 头部标识客户端软件、操作系统和设备类型。虽然对分析和提供特定于设备的内容很有用,但由于用户代理欺骗,它也是出了名的不可靠。
现代最佳实践是使用特性检测而不是用户代理嗅探。然而,该头部对于日志记录、调试和检测机器人仍然很有价值。
快速提示:使用不同的 User-Agent 字符串测试你的 API 端点,以确保它们不会对合法客户端造成破坏。一些服务器错误地阻止了具有不熟悉用户代理的请求。
响应头部提供关于服务器响应的元数据,包括内容类型、缓存指令、安全策略和服务器信息。它们对于正确的内容渲染、性能优化和安全性至关重要。
关键响应头部包括:
| 头部 | 用途 | 示例 |
|---|---|---|
Content-Type |
响应正文的媒体类型 | Content-Type: text/html; charset=utf-8 |
Content-Length |
响应正文的大小(字节) | Content-Length: 1234 |
Content-Encoding |
使用的压缩算法 | Content-Encoding: gzip |
Set-Cookie |
向客户端发送 cookie | Set-Cookie: id=a3; Secure; HttpOnly |
Location |
重定向的 URL | Location: https://example.com/new |
Server |
关于服务器软件的信息 | Server: nginx/1.18.0 |
Date |
发送响应的日期和时间 | Date: Mon, 31 Mar 2026 12:00:00 GMT |
ETag |
资源版本的唯一标识符 | ETag: "33a64df551425fcc55e" |
Content-Type 头部对于正确的内容渲染至关重要。它告诉浏览器如何解释响应正文。始终包含字符编码(通常是 UTF-8)以防止编码问题:
Content-Type: application/json; charset=utf-8
Content-Type: text/html; charset=utf-8
Content-Type: image/png
缺少或不正确的 Content-Type 头部会导致浏览器猜测内容类型(MIME 嗅探),这可能导致安全漏洞和渲染问题。
Set-Cookie 头部在客户端创建 cookie。现代 cookie 应始终包含安全属性:
Set-Cookie: sessionId=abc123; Secure; HttpOnly; SameSite=Strict; Max-Age=3600
安全头部是你抵御常见 Web 漏洞的第一道防线。它们指示浏览器执行安全策略,保护用户免受 XSS、点击劫持和中间人攻击等攻击。
每个生产应用程序都应实现这些基本的安全头部:
CSP 通过控制浏览器可以加载哪些资源来防止 XSS 攻击。它是最强大的安全头部之一,但需要仔细配置:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com
从限制性策略开始,根据需要逐步放宽。使用 Content-Security-Policy-Report-Only 测试策略而不破坏你的网站。
HSTS 强制浏览器对你的域的所有未来请求使用 HTTPS,防止协议降级攻击:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
preload 指令允许你将域提交到 HSTS 预加载列表,该列表被硬编码到浏览器中。这提供="matrix-links" style="text-align:center;padding:10px 0;border-top:1px solid rgba(255,255,255,0.05)">More Tools: seo-ioimg-kitrun-devgo-calc