HEAD 方法请求服务器对 GET 会返回的响应,但不会传输响应内容。它适合需要状态、验证器、类型或长度的检查,但前提是元数据与真实的 GET 路径保持一致。
比较规范化后的响应头集合
Date 这类动态响应头会随请求不同而变化。只比较描述所选表示的那些字段:
url=https://www.example.test/downloads/manual.pdf
curl -sS -I "$url" > head.headers
curl -sS -D get.headers -o /dev/null "$url"
for file in head.headers get.headers; do
printf '== %s\n' "$file"
awk '
/^HTTP\// ||
tolower($1) ~ /^(content-type:|content-length:|content-encoding:|cache-control:|etag:|last-modified:|vary:)$/ { print }
' "$file"
done
两次请求应选择相同的状态码与表示元数据。压缩协商也应纳入比较:给两个请求发送相同的 Accept-Encoding 值。
不要把 HEAD 当作唯一的发布检查
服务器可能在文件缺失、不可读或被截断时仍合成看似合理的响应头。在冒烟测试里保留一个小的 GET 并核验其正文或校验和。HEAD 降低了传输成本,但并不能证明有效载荷存在。
显式检查重定向
不使用 --location 时,curl -I 报告第一个响应,适合测试重定向策略;使用 --location 时报告最终链,适合测试目标地址。请记录这条命令回答的是哪个问题:
curl -sS -I --max-redirs 0 https://old.example.test/manual
curl -sS -I --location https://old.example.test/manual
把方法相关的失败视为配置缺陷
一个对 GET 返回 200、对 HEAD 返回 405 或 404 的静态页面,通常暴露出代理或路由的不一致。应当修复方法处理,而不是教监控系统忽略它——除非端点契约刻意不允许 HEAD。
来源
- RFC 9110 — HTTP Semantics,HEAD 方法语义,已核验 2026-08-23。
- curl manual,
--head、--include与重定向选项,已核验 2026-08-23。