用 curl 看请求与响应头
curl 默认只把响应体写到标准输出,看协议头需要显式要求:-I 发 HEAD 请求只取响应头,-D - 把响应头单独写到标准输出,-i 把响应头与响应体一起打印,加 -v 则连请求头与 TLS 握手细节都能看到。排查认证失败、缓存不生效、跨域报错、网关 502 时,响应头里的 Server、Cache-Control、WWW-Authenticate、Set-Cookie 往往直接给出答案,比翻应用日志快得多。
基本信息
| 适用平台 | Linux、macOS、Windows 10 及以上(curl 同名命令) |
|---|---|
| 语法 | curl -I URL 或 curl -D - -o /dev/null URL |
| 常用选项 | -I HEAD 请求 -i 带头输出 -D 头写文件 -v 详细调试 -H 自定义请求头 |
| 重要差异 | -I 发的是 HEAD 方法,不是 GET |
| 重定向 | 加 -L 跟随后再看最终响应头 |
| 调试输出 | -v 的内容走标准错误 |
典型使用场景
- 快速确认站点可达性与返回码,并看 Server、缓存相关头。
- 排查 502、504:从响应头判断是网关自身响应还是后端返回。
- 调试接口鉴权:核对 401 响应里的认证方式提示是否符合预期。
- 检查跨域配置:确认允许的来源是否命中请求的 Origin。
- 验证缓存是否生效:比对 Cache-Control、Age 等字段的变化。
常用写法
常用写法
curl -sSI https://example.com # 只显示响应头(HEAD 请求)
curl -sS -D - -o /dev/null https://example.com # 响应头到标准输出,响应体丢弃
curl -sS -i https://example.com | head -20 # 响应头与响应体一起输出
curl -sS -I -H 'User-Agent: ops-check/1.0' https://example.com
curl -sS -IL https://example.com # 跟随重定向,看最终响应头
curl -sS -D - -o /dev/null -H 'Origin: https://a.example' https://api.example/health
curl -sS -v https://example.com 2>&1 | grep -iE '^[<>]' # 过滤出请求与响应头
curl -sS -w '%{http_code} %{time_total}\n' -o /dev/null https://example.com关键选项对照
| 选项 | 作用 | 使用要点 |
|---|---|---|
| -I | 只取响应头 | 发 HEAD 方法,部分网关不支持会返回 405 |
| -i | 头与体一起输出 | 人看方便,脚本解析要按空行切分 |
| -D 文件 | 响应头另存 | 批量排查时便于事后对比 |
| -o /dev/null | 丢弃响应体 | 只看头时避免大响应刷屏 |
| -H | 自定义请求头 | 传 Origin、Authorization 做定向排查 |
| -v | 详细调试 | 连请求头与 TLS 信息都能看到,输出到标准错误 |
-I 发的是 HEAD 请求,部分框架与网关不支持,会返回 405 或 501。遇到这种接口改用 -D - -o /dev/null 发 GET,只看响应头,结论才准确。
有重定向时输出会包含多段响应头:脚本里要抓最终一段需要加 -L 跟随,或自行按空行切分取最后一段,否则拿到的是第一个跳转的响应头。
curl 的 -v 调试输出默认写到标准错误,管道处理时记得 2>&1,否则会以为命令没有输出。