HTTP 请求头 / 响应头大全:分类拆解 + 场景避坑,开发者必备(附速查表)

做接口调试、性能优化或安全配置时,HTTP 头信息是 “隐形的关键”—— 比如用Accept-Encoding启用 Gzip 压缩能减 50% 传输体积,用Cache-Control控制缓存能减少重复请求,用User-Agent适配不同客户端。但很多开发者只知道常见的Host“Cookie”,对全量 HTTP 头的作用和用法一知半解。今天整理完整 HTTP 头体系,按 “通用头(请求响应通用)→请求头(客户端发服务器)→响应头(服务器回客户端)→实体头(描述资源内容)” 分类,每个 Header 都附 “核心作用 + 示例 + 场景避坑”,文末还有 “场景速查表”,按Ctrl+F可快速定位目标 Header,收藏这篇,调试时不用再到处搜!

一、先搞懂:HTTP 头的基本规则(避免低级错误)

在看具体 Header 前,先明确 3 个通用规则,避免用错:

  1. 格式要求:每个 Header 由 “名称:值” 组成(冒号后必须有空格),如Accept: text/html(错误写法:Accept:text/html,少空格会导致服务器无法识别);
  2. 分类逻辑
    • 通用头:请求和响应都能⽤,如Date“Cache-Control”;
    • 请求头:仅客户端发给服务器,如Accept“User-Agent”;
    • 响应头:仅服务器回客户端,如Location“Set-Cookie”;
    • 实体头:描述请求 / 响应的资源内容,如Content-Type“Content-Length”;
  3. 快速查找:按Ctrl+F输入 Header 名称(如 “Cache-Control”),可直接定位到目标内容。

二、通用头:请求 / 响应都能用的 “公共指令”

通用头不绑定特定资源,主要用于控制 “事务流程”(如缓存、连接、时间),是 HTTP 通信的 “基础规则”。

Header 名称 核心作用 示例 场景 + 避坑提示
Cache-Control 控制缓存策略(最核心的缓存指令) Cache-Control: no-cache, max-age=3600 场景: - 静态资源(图片 / CSS)设max-age=86400(缓存 1 天); - 动态接口(用户信息)设no-cache(每次验证新鲜度);避坑:no-cache不是 “不缓存”,是 “缓存前需验证”,no-store才是 “完全不缓存”(敏感数据用)
Date 发送请求 / 响应的时间(GMT 格式) Date: Tue, 15 Nov 2025 08:12:31 GMT 场景:排查 “服务器时间偏差” 导致的签名过期问题(如 JWT 校验失败时,对比客户端与服务器 Date);避坑:必须用 GMT 时间,不能用本地时间(如 “2025-11-15 16:12:31” 会报错)
Connection 控制 TCP 连接是否持久化(HTTP/1.1 核心) Connection: keep-alive /close 场景: - 长连接(默认keep-alive):减少 TCP 握手开销,适合多请求场景; - 短连接(close):单请求后断开,适合高并发低耗时场景;避坑:HTTP/2 已默认启用多路复用,无需手动设Connection,设了反而可能冲突
Pragma 兼容 HTTP/1.0 的缓存指令(逐渐被替代) Pragma: no-cache 场景:适配老旧客户端(如 IE 浏览器),与Cache-Control配合用(Pragma: no-cache+Cache-Control: no-cache);避坑:仅支持no-cache值,不支持max-age,新项目优先用Cache-Control
Via 记录请求 / 响应经过的代理服务器(链路追踪) Via: 1.0 proxy1.com (Apache/1.1), 1.1 proxy2.com 场景:排查 “代理导致的请求异常”(如接口超时,看是否卡在某层代理);避坑:代理服务器必须正确添加Via,否则无法追踪完整链路
Warning 提示资源可能存在的问题(非错误,仅警告) Warning: 199 Miscellaneous warning "资源即将过期" 场景:服务器返回 “缓存即将失效”“资源备用地址” 等提示;避坑:Warning不影响请求 / 响应正常处理,仅用于辅助调试,不要依赖它做业务逻辑

三、请求头:客户端发给服务器的 “需求说明”

请求头是客户端告诉服务器 “我要什么、我能接受什么”,比如接受的内容类型、身份信息、来源地址,是接口适配和安全验证的核心。

(一)内容协商类:告诉服务器 “我能处理什么”

Header 名称 核心作用 示例 场景 + 避坑提示
Accept 指定客户端能接受的内容类型(MIME) Accept: text/html, application/json, */* 场景: - 前端调接口时设Accept: application/json(只要 JSON 响应); - 浏览器访问网页时设Accept: text/html;避坑:*/*表示 “接受所有类型”,但尽量明确(如只接受 JSON),避免服务器返回不兼容格式
Accept-Charset 客户端能接受的字符编码(如 UTF-8) Accept-Charset: utf-8, iso-8859-1;q=0.5 场景:适配多语言场景(如中文项目必须设utf-8);避坑:q=0.5表示优先级(0-1,1 最高),不设默认 1,建议优先用utf-8,避免乱码
Accept-Encoding 客户端支持的压缩格式(减传输体积) Accept-Encoding: gzip, deflate, br 场景:所有请求都建议设(服务器返回压缩后的响应,体积减 50%-80%);避坑:br(Brotli)比gzip压缩率更高,优先支持,但需服务器也支持(Nginx/Apache 需配置)
Accept-Language 客户端能接受的语言(如中文、英文) Accept-Language: zh-CN, en-US;q=0.8 场景:多语言网站(如设zh-CN返回中文页面,en-US返回英文);避坑:语言标识要规范(如zh-CN不是zhen-US不是en),否则服务器无法识别

(二)身份与来源类:告诉服务器 “我是谁、我从哪来”

Header 名称 核心作用 示例 场景 + 避坑提示
Authorization 客户端身份验证信息(如 Token、Basic Auth) Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... 场景: - JWT 令牌:Bearer + Token(接口鉴权); - 基础认证:Basic + Base64(用户名:密码)(仅测试用,不安全);避坑:生产环境用Bearer(JWT/OAuth2),不要用Basic(Base64 可解码,明文风险)
Cookie 客户端保存的 Cookie(登录态、用户配置) Cookie: UserID=123; Token=abc; Skin=dark 场景:保持登录态(服务器通过Set-Cookie设置,客户端下次请求自动携带);避坑:敏感信息(如密码)不要存 Cookie,设HttpOnly(防 JS 读取)和Secure(仅 HTTPS 传输)
Host 指定服务器域名 + 端口(HTTP/1.1 必传) Host: www.example.com /Host: api.example.com:8080 场景:虚拟主机(一台服务器多域名,靠Host区分);避坑:HTTP/1.1 必须传Host,否则服务器返回 400 错误,端口默认 80(HTTP)/443(HTTPS)可省略
Referer 当前请求的来源页面(“来路”) Referer: https://www.example.com/login 场景: - 防盗链(如图片只允许从自家域名引用); - 统计来源(如用户从哪个页面跳转来);避坑:直接输入 URL 或书签访问时,Referer为空,不要依赖它做必选验证
User-Agent 客户端设备 / 浏览器信息(适配用) User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36 场景: - 适配移动端 / PC 端(识别Mobile关键词); - 排查浏览器兼容性(如 Chrome/Firefox 差异);避坑:不要靠User-Agent完全判断设备,优先用响应式设计,User-Agent可伪造

(三)条件请求类:告诉服务器 “满足条件才返回”

Header 名称 核心作用 示例 场景 + 避坑提示
If-Modified-Since 仅资源在指定时间后修改过,才返回 200(否则 304) If-Modified-Since: Sat, 29 Oct 2025 19:43:31 GMT 场景:缓存静态资源(如图片,第一次返回Last-Modified,下次请求带这个 Header,未修改返回 304,减少传输);避坑:时间格式必须是 GMT,且只精确到秒,毫秒级修改无法识别
If-None-Match 仅资源的 ETag 与指定值不同,才返回 200(否则 304) If-None-Match: "abc123def456" 场景:比If-Modified-Since更精准(如文件内容改了但修改时间没变);避坑:ETag 值要带引号(如"abc"不是abc),服务器返回的 ETag 格式要统一
Range 请求资源的部分内容(断点续传) Range: bytes=0-499(前 500 字节) /Range: bytes=500-(从 500 字节到结尾) 场景: - 大文件下载(如视频,支持断点续传); - 分片上传(请求部分内容验证);避坑:服务器支持的话返回 206(Partial Content),不支持返回 416(Requested Range Not Satisfiable)

四、响应头:服务器回客户端的 “处理结果说明”

响应头是服务器告诉客户端 “我返回了什么、你该怎么处理”,比如缓存规则、重定向地址、Cookie 设置,是控制客户端行为的核心。

(一)缓存控制类:告诉客户端 “怎么缓存资源”

Header 名称 核心作用 示例 场景 + 避坑提示
ETag 资源的唯一标识(如内容哈希,配合 If-None-Match) ETag: "abc123def456" /ETag: W/"abc123"(W 表示弱验证) 场景:精准控制缓存(内容变则 ETag 变);避坑:弱验证(W / 前缀)适合动态内容(如带时间戳的页面),强验证适合静态内容(如图片)
Last-Modified 资源最后修改时间(配合 If-Modified-Since) Last-Modified: Tue, 15 Nov 2025 12:45:26 GMT 场景:静态资源缓存(如 CSS/JS);避坑:如果资源修改频繁(如每秒改),Last-Modified精度不够,建议用 ETag
Expires 资源过期时间(HTTP/1.0 缓存指令,优先级低于 Cache-Control) Expires: Thu, 01 Dec 2025 16:00:00 GMT 场景:兼容老旧客户端(与Cache-Control配合用);避坑:时间必须是 GMT,且服务器时间要准,否则缓存会提前失效或过期不失效
Vary 告诉客户端 “哪些 Header 变化会导致响应不同” Vary: Accept-Encoding, Accept-Language 场景:CDN 缓存(如不同Accept-Encoding返回不同压缩格式,CDN 靠Vary区分缓存);避坑:不要设Vary: *(会导致 CDN 无法缓存),明确指定具体 Header

(二)跳转与会话类:控制客户端跳转和登录态

Header 名称 核心作用 示例 场景 + 避坑提示
Location 重定向地址(配合 3xx 状态码) Location: https://www.example.com/home(302 跳转) 场景: - 登录后跳首页(302 临时跳转); - 域名变更跳新地址(301 永久跳转);避坑:301 是永久跳转(浏览器会缓存),临时跳转用 302/307,不要混用
Set-Cookie 服务器向客户端设置 Cookie(登录态、配置) Set-Cookie: UserID=123; Max-Age=86400; HttpOnly; Secure; SameSite=Lax 场景:设置登录态(Max-Age是存活秒数);避坑: - 加HttpOnly(防 XSS 窃取); - 加Secure(仅 HTTPS 传输); - 加SameSite=Lax(防 CSRF)
Refresh 客户端自动刷新 / 跳转(非标准,但浏览器支持) Refresh: 5; url=https://www.example.com/timeout 场景:登录超时后 5 秒跳登录页;避坑:不是 HTTP 标准头,优先用Location+3xx 状态码,仅临时场景用(如页面提示后跳转)

(三)内容与安全类:告诉客户端 “返回内容是什么、怎么安全处理”

Header 名称 核心作用 示例 场景 + 避坑提示
Content-Encoding 服务器返回内容的压缩格式(对应 Accept-Encoding) Content-Encoding: gzip 场景:返回压缩后的资源(配合客户端Accept-Encoding);避坑:客户端必须支持对应的压缩格式,否则无法解压(如客户端没设Accept-Encoding: gzip,服务器不要返回gzip
Content-Length 返回内容的字节数(固定长度时用) Content-Length: 1024 场景:返回固定长度的资源(如 JSON、图片);避坑:不能与Transfer-Encoding: chunked同时用(chunked 是分块传输,长度不固定),否则服务器返回 400 错误
Content-Type 返回内容的 MIME 类型(核心,避免乱码) Content-Type: application/json; charset=utf-8 /Content-Type: text/html; charset=utf-8 场景: - 接口返回 JSON:application/json; - 网页返回 HTML:text/html; - 图片:image/jpeg/image/png;避坑:必须加charset=utf-8,否则中文会乱码,MIME 类型要准确(如 JSON 不能设text/plain
Server 服务器软件信息(如 Nginx、Apache) Server: Nginx/1.22.1 /Server: Apache/2.4.54 场景:排查服务器兼容性(如 Nginx 与 Apache 的配置差异);避坑:生产环境可隐藏具体版本(如Server: Nginx),减少被攻击的风险(黑客不会知道具体漏洞版本)
WWW-Authenticate 告诉客户端 “需要身份验证”(配合 401 状态码) WWW-Authenticate: Basic realm="登录验证" 场景:需要登录的接口(客户端未带Authorization时,返回 401 + 这个 Header);避坑:仅用于基础认证,生产环境用 OAuth2/JWT,不要依赖它做复杂鉴权

五、实体头:描述请求 / 响应的 “资源内容属性”

实体头既可用在请求(如 POST 的表单内容),也可用在响应(如返回的文件内容),核心是 “描述资源本身的属性”。

Header 名称 核心作用 示例 场景 + 避坑提示
Content-Language 资源的语言(如中文、英文) Content-Language: zh-CN

详细信息:https://tool.wanxiangsucai.com/httpheader/