HTTP Header 是 HTTP 协议中非常重要的一部分,它位于 HTTP 请求和 HTTP 响应的起始行之后,和正文之前,它以 Key: Value 的形式成对出现,用于传递关于请求/响应本身、客户端、服务器以及所传输数据元信息。

(图片来源网络,侵删)
可以把 HTTP Header 想象成一封信的信封和信件内容旁边的备注,信封上的信息(寄信人、收信人、地址)Header,而信件正文就是 Body。
HTTP Header 的主要分类
为了更好地理解,我们可以将 HTTP Header 分为以下几大类:
通用头
这些头字段可以同时出现在请求和响应中,但它们与最终的报文正文无关。
Connection: 管理服务器与客户端之间的连接,Connection: keep-alive表示持久连接,Connection: close表示请求完成后关闭连接。Date: 报文创建的日期和时间。Transfer-Encoding: 指定报文主体的传输编码方式,Transfer-Encoding: chunked用于分块传输。Via: 显示报文经过的中间网关或代理服务器。
请求头
这些头字段只出现在 HTTP 请求中,包含了客户端(浏览器)的信息以及对服务器的请求要求。

(图片来源网络,侵删)
- `Host (必需): 指定请求资源所在的主机名和端口号,HTTP/1.1 协议要求每个请求都必须包含此头。
- 示例:
Host: www.example.com
- 示例:
User-Agent: 标识发起请求的用户代理(通常是浏览器、爬虫或工具)的信息。- 示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
- 示例:
Accept: 告诉服务器客户端能够处理的内容类型(MIME Type),服务器会根据此头返回最合适的内容。- 示例:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
- 示例:
Accept-Language: 告诉服务器客户端偏好的自然语言。- 示例:
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
- 示例:
Accept-Encoding: 告诉服务器客户端支持的内容编码方式,如 gzip, deflate, br。- 示例:
Accept-Encoding: gzip, deflate, br
- 示例:
Authorization: 包含用于认证的凭证,最常见的是用于 Basic 认证或 Bearer Token 认证。- 示例:
Authorization: Bearer <your_token_here>
- 示例:
Cookie: 客户端将服务器之前设置的 Cookie 发送给服务器,用于维持会话状态。- 示例:
Cookie: sessionid=123456; csrf_token=abcde
- 示例:
- `Referer (注意是referrer的拼写错误): 表示请求的来源页面 URL。
- 示例:
Referer: https://www.google.com/
- 示例:
Content-Type: 请求正文的媒体类型(仅当有请求体时使用,如 POST, PUT 请求)。- 示例:
Content-Type: application/json
- 示例:
Content-Length: 请求正文的字节长度(仅当有请求体时使用)。- 示例:
Content-Length: 53
- 示例:
响应头
这些头字段只出现在 HTTP 响应中,包含了服务器的信息以及对客户端的响应要求。
Server: 标识服务器软件的名称和版本。- 示例:
Server: Apache/2.4.1
- 示例:
Content-Type: 响应正文的媒体类型,告诉浏览器如何解析和显示返回的内容。- 示例:
Content-Type: text/html; charset=UTF-8
- 示例:
Content-Length: 响应正文的字节长度。- 示例:
Content-Length: 1270
- 示例:
Content-Encoding: 响应正文使用的压缩编码方式,如 gzip。- 示例:
Content-Encoding: gzip
- 示例:
Set-Cookie: 服务器在客户端设置 Cookie,用于后续请求中维持状态。- 示例:
Set-Cookie: sessionid=654321; Path=/; HttpOnly
- 示例:
Location: 用于重定向,配合3xx状态码使用,告诉客户端新的资源 URL。- 示例:
Location: https://www.example.com/new-location
- 示例:
Cache-Control: 指定关于缓存机制的指令,如no-cache,max-age=3600。- 示例:
Cache-Control: public, max-age=31536000
- 示例:
Expires: 响应过期的日期和时间,已被Cache-Control头部分取代。- 示例:
Expires: Wed, 21 Oct 2025 07:28:00 GMT
- 示例:
实体头
这些头字段描述了请求或响应的正文内容,它们既可以出现在请求中,也可以出现在响应中,很多实体头现在被归类到了请求头和响应头中(如 Content-Type, Content-Length)。
Content-Language: 实体正文使用的自然语言。Content-Location: 实体正文的替代位置。Last-Modified: 资源最后一次被修改的日期和时间。
如何查看 HTTP Header?
在浏览器中查看
- Chrome / Firefox / Edge:
- 打开开发者工具 (F12 或
Ctrl+Shift+I)。 - 切换到 Network (网络) 标签页。
- 刷新页面或执行一个操作,你会在列表中看到所有网络请求。
- 点击任意一个请求,在右侧的 Headers (标头) 标签页中,你可以看到完整的请求头和响应头。
- 打开开发者工具 (F12 或
使用命令行工具
curl: 这是一个非常强大的命令行工具。- 查看响应头:
curl -I https://www.example.com # 或者 curl --head https://www.example.com
- 查看请求头和响应头:
curl -v https://www.example.com # -v 表示 verbose (详细) 模式
- 自定义请求头:
curl -H "X-Custom-Header: my-value" -H "Accept: application/json" https://www.example.com
- 查看响应头:
一个完整的 HTTP 请求示例
下面是一个从浏览器访问 https://www.example.com 的简化 HTTP 请求示例,其中包含了各种请求头:
GET / HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate, br Connection: keep-alive Cookie: sessionid=123456; csrftoken=abc123
解析:

(图片来源网络,侵删)
GET / HTTP/1.1: 请求行,表示使用 HTTP/1.1 协议获取根路径 的资源。Host: www.example.com: 请求的目标主机。User-Agent: 告诉服务器我是 Chrome 浏览器。Accept: 我能接收 HTML、XML、图片等格式的数据。Accept-Language: 我优先使用中文,其次是英文。Accept-Encoding: 我能接收 gzip、br 等压缩格式。Connection: 希望保持连接,以便后续请求复用。Cookie: 附带上之前登录的会话信息。
一个完整的 HTTP 响应示例
服务器收到请求后,可能会返回如下响应:
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Wed, 21 Dec 2025 10:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1270
Connection: keep-alive
Set-Cookie: csrftoken=xyz789; expires=Thu, 21 Dec 2025 10:00:00 GMT; HttpOnly; Path=/
Cache-Control: public, max-age=3600
Last-Modified: Tue, 20 Dec 2025 09:00:00 GMT
<!DOCTYPE html>
<html>
<head>Example Domain</title>
</head>
<body>
<p>This domain is for use in illustrative examples in documents.</p>
</body>
</html>
解析:
HTTP/1.1 200 OK: 状态行,表示请求成功。Server: 服务器使用的是 Nginx 1.18.0。Date: 响应生成的时间。Content-Type: 返回的是 HTML 文本,字符集为 UTF-8。Content-Length: 返回的 HTML 正文长度为 1270 字节。Connection: 保持连接。Set-Cookie: 服务器在客户端设置了一个名为csrftoken的 Cookie,并设置了过期时间和安全属性。Cache-Control: 建议将此响应缓存 3600 秒(1小时)。Last-Modified: 这个 HTML 文件最后修改的时间。- 空行之后是实际的响应正文(HTML 代码)。
HTTP Header 是 HTTP 协议的“神经系统”,它承载了控制客户端与服务器之间交互的所有指令和元数据,理解常见的 Header 参数对于 Web 开发、调试、性能优化(缓存、压缩)、安全认证(CORS, Cookie)以及 API 设计都至关重要。
