HTTP 头解析实战:把请求头响应头逐条拆开看懂
把 curl -I 跑出来的一坨 HTTP 头粘进去,逐条拆成表格。本文讲请求头响应头怎么读,Content-Type、Cache-Control、CORS、Cookie 和安全头各管什么,以及排查缓存和接口的真实例子。
HTTP 头解析实战:把请求头响应头逐条拆开看懂
调接口的时候,真正能告诉你出了什么问题的,往往不是响应体,而是那一坨 HTTP 头。可惜终端里 curl -I 打出来的头是折行的、挤成一团的,值里又夹着冒号和分号,肉眼扫起来很费劲。把它拆成一行一个头、每个头配一句说明,问题通常立刻就浮出来。
请求头和响应头不是一回事
一次 HTTP 往返有两组头。请求头是客户端发给服务器的,常见的有 Host(访问哪个域名)、User-Agent(客户端是谁)、Accept(我能接受什么类型的响应)、Authorization(凭据)、Cookie(带上之前存的 Cookie)。响应头是服务器回给客户端的,比如 Content-Type、Cache-Control、Set-Cookie、各种安全头。
两组头都以一个起始行打头:请求是 GET /path HTTP/1.1 这样的请求行,响应是 HTTP/1.1 200 OK 这样的状态行。看到状态码不对,可以先翻一份 HTTP 状态码对照表 确认它到底代表什么,再回头看头里有没有对应的线索。
几个最常见的头分别管什么
Content-Type 声明响应体的媒体类型,告诉客户端该怎么读这段字节。网页是 text/html; charset=utf-8,接口响应是 application/json。后面 charset 那段指定用哪种字符编码解码。一个 JSON 接口如果忘了发 application/json,有些客户端会把响应体解析错;一份本该下载的文件如果被当成 text/plain,浏览器会直接内联显示而不是保存。
Cache-Control 是一串以逗号分隔的指令,决定一条响应能不能缓存、缓存多久。max-age=3600 表示可缓存一小时,no-store 完全禁止缓存,private 限定只存终端浏览器不进共享 CDN,must-revalidate 在过期后强制校验一次。静态资源常写成 public, max-age=31536000, immutable。
Set-Cookie 每个 Cookie 发一条,所以一次登录同时设会话 id、CSRF 令牌和偏好,就会出现三条独立的 Set-Cookie。它是头折叠的例外,绝不能合并成逗号一行,否则 HttpOnly、Secure、SameSite 这些标志会乱掉。
CORS 一族(Access-Control-Allow-Origin、-Methods、-Headers)决定跨域请求放不放行,预检失败时把它们并排看,通常一眼就看出哪里对不上。
一段真实的响应头拆给你看
假设接口返回 401,curl -i https://api.example.com/me 打出这段:
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Cache-Control: no-store
WWW-Authenticate: Bearer realm="api", error="invalid_token"
Set-Cookie: sid=abc123; HttpOnly; Secure; SameSite=Lax
逐条拆开后能立刻读出来:状态行是 401,说明鉴权没过;WWW-Authenticate 写着 invalid_token,直接点明令牌失效,不是没带令牌;Content-Type 确实是 application/json,所以客户端解析没问题;Cache-Control: no-store 保证这条错误响应不会被缓存住,你重试时不会拿到旧的;那条 Set-Cookie 带了 HttpOnly; Secure; SameSite=Lax,会话 Cookie 的三个标志都到位。原本折在终端里看不清的信息,拆成五行就全交代清楚了。
调接口和排查缓存时它最顶用
我自己最常用它的场景是排查缓存。有一次明明改了 CDN 配置,线上还是返回旧文件,把响应头粘进去一拆,发现 Cache-Control 写的是 max-age=31536000, immutable,等于让浏览器一年都不回源,问题根本不在 CDN,而在源站这行头。把每个指令摊开看,比对着规范猜哪条在起作用快得多。要反过来调这串指令,可以用 Cache-Control 生成器 把 max-age、no-store、private 这些拼成一行再贴回服务器配置。
安全头一眼看哪些缺了
上线前对预发布 URL 跑一次 curl -I,重点看这几个安全头在不在:Strict-Transport-Security(HSTS,强制只走 HTTPS,挡降级攻击)、Content-Security-Policy(CSP,白名单限定脚本和样式来源,防跨站脚本的主力)、X-Frame-Options(挡点击劫持)、X-Content-Type-Options(挡 MIME 嗅探)。该有的地方空着,就是发布前要补的清单。
HTTP 头解析器 把这些活全在浏览器本地做完:逐头拆分、给常见头配说明、给安全头打标记、重复的 Set-Cookie 逐条保留。粘贴的头本身和 Authorization、Cookie 这类敏感头绝不写进分享链接,所以你贴进工单或聊天前,记得先把真实令牌脱敏。下次再被一坨折行的头卡住,拆开它,问题往往就摆在某一行里。
Made by Toolora · Updated 2026-06-13