NetTool1

HTTP Headers Explained: Request, Response & Security Headers

· 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 头部是在 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 头部

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 头部标识客户端软件、操作系统和设备类型。虽然对分析和提供特定于设备的内容很有用,但由于用户代理欺骗,它也是出了名的不可靠。

现代最佳实践是使用特性检测而不是用户代理嗅探。然而,该头部对于日志记录、调试和检测机器人仍然很有价值。

快速提示:使用不同的 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 和字符编码

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 头部

Set-Cookie 头部在客户端创建 cookie。现代 cookie 应始终包含安全属性:

Set-Cookie: sessionId=abc123; Secure; HttpOnly; SameSite=Strict; Max-Age=3600

安全头部:保护你的应用程序

安全头部是你抵御常见 Web 漏洞的第一道防线。它们指示浏览器执行安全策略,保护用户免受 XSS、点击劫持和中间人攻击等攻击。

每个生产应用程序都应实现这些基本的安全头部:

Content-Security-Policy (CSP)

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 测试策略而不破坏你的网站。

Strict-Transport-Security (HSTS)

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