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不是zh,en-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/

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容