HEAD
用法
HEAD 请求用于获取资源的元数据:大小、类型、新鲜度以及是否存在。服务器处理请求的方式与 GET 完全相同,但在传输响应体之前停止。所有响应头,包括 Content-Length 和 Content-Type,都与完整 GET 响应的相同。
常见用例
链接校验。自动化工具发送 HEAD 请求以验证 URL 是否返回 200,而无需下载完整页面。失效链接会以 404 或 410 响应的形式暴露出来。
监控与健康检查。可用性监控器使用 HEAD 探测端点以确认可用性。较小的响应体积减少了带宽消耗并加快了轮询频率。
内容协商探测。客户端在决定是否获取完整资源之前,先检查 Content-Type、Content-Encoding 和 Content-Language 请求头。
缓存校验。携带 ETag 或 Last-Modified 的 HEAD 响应允许缓存在不下载响应体的情况下检查新鲜度。如果 HEAD 响应头表明已缓存的副本已过期,缓存会相应地标记该条目。
下载大小估算。文件管理器和下载工具从 HEAD 响应中读取 Content-Length,以在开始传输前显示文件大小或分配磁盘空间。
注意
HEAD 请求中的请求体通常没有明确定义的语义。一些实现会拒绝携带请求体的 HEAD 请求。包含请求体可能会在错误解析消息分帧的中间设备中触发请求走私漏洞。
示例
一个用于检查资源是否存在并查看响应头的 HEAD 请求。服务器返回 200 及内容元数据,但没有响应体。
请求
HEAD /report.pdf HTTP/1.1
Host: example.com
响应
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 284750
Last-Modified: Mon, 10 Feb 2025 08:30:00 GMT
ETag: "f47ac10b"
Content-Length 请求头表明该文件约为 278 KB。Last-Modified 和 ETag 请求头为后续获取时的条件请求提供了校验器。
CORS
HEAD 是 CORS 安全列表方法。跨域 HEAD 请求不会触发预检请求,遵循与 GET 相同的安全列表行为。
HEAD 与 GET 对比
HEAD 返回与 GET 相同的响应头,但完全省略响应体。这使 HEAD 在仅需元数据的任务中更快且更节省带宽。
常见应用包括检查资源是否存在、读取 Content-Length 以获取文件大小、查看 Last-Modified 日期,以及在不下载完整资源的情况下获取 ETag 等缓存校验器。
一些服务器通过在内部运行完整的 GET 处理程序并在发送响应前剥离响应体来实现 HEAD。在这种情况下,性能收益仅限于节省了响应体字节的传输时间。
HEAD 响应还会更新已缓存的 GET 响应。当缓存发送 HEAD 请求且返回的校验器与已存储的 GET 条目匹配时,缓存会相应地刷新存储的响应头。
SEO 影响
搜索爬虫使用 GET 而非 HEAD 抓取页面,因此 HEAD 不会驱动索引。HEAD 对于确认 URL 返回 200 而无需下载响应体的链接检查器、可用性监控器和 SEO 审计工具仍然有用。