javascript 中可通过 fetch api 发起 head 请求获取响应头而无需下载响应体,适用于检查资源存在性、获取 etag、content-length 等元数据;需显式设置 method: 'head',响应体为空但可读取 status、headers 等信息,且受 cors 限制。

JavaScript 中可以通过 fetch API 使用 HEAD 方法发起请求,仅获取响应头(不下载响应体),适用于检查资源是否存在、获取缓存信息、ETag、Content-Length 等元数据。
使用 fetch 发起 HEAD 请求
fetch 原生支持 HEAD 方法,只需在配置对象中指定 method: 'HEAD'。注意:HEAD 请求没有响应体,response.body 为空,但所有响应头可通过 response.headers 访问。
- 必须显式设置
method: 'HEAD',不能省略(默认是GET) - 响应体不可读(
await response.text()或json()会返回空字符串或报错) - 可正常读取状态码(
response.status)、状态文本(response.statusText)和 headers
示例:
fetch('/api/data', {
method: 'HEAD'
})
.then(response => {
console.log('Status:', response.status); // 如 200、404
console.log('Content-Length:', response.headers.get('content-length'));
console.log('ETag:', response.headers.get('etag'));
console.log('Cache-Control:', response.headers.get('cache-control'));
})
.catch(err => console.error('请求失败:', err));
处理跨域与 CORS 限制
HEAD 请求同样受 CORS 策略约束。若目标接口未在响应头中声明允许 HEAD 方法(Access-Control-Allow-Methods: HEAD, GET),浏览器会拒绝读取响应头。
- 服务端需在预检响应(preflight)中明确包含
HEAD在Access-Control-Allow-Methods中 - 若只关心状态码(如探测资源是否存在),可结合
mode: 'no-cors',但此时无法读取响应头和状态码(仅能判断是否成功,且响应被“不透明”化)——通常不推荐 - 开发时可用
curl -I URL验证服务端是否正确返回 HEAD 响应头
常见用途与注意事项
HEAD 请求适合轻量探测,避免传输冗余数据:
- 检查文件/资源是否存在(
status === 200或404) - 获取
Last-Modified或ETag用于条件请求(后续带If-None-Match的 GET) - 预估资源大小(
Content-Length),辅助下载策略 - 验证认证令牌有效性(某些 API 提供
/auth/check的 HEAD 端点)
注意:Content-Length 对动态生成内容(如流式响应、gzip 压缩后长度)可能不准确;部分服务器对 HEAD 返回的 header 有精简(如不返回 Set-Cookie)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











