HEAD
请求是HTTP/1.1协议中定义的一个请求方法,与GET
请求相似,但只请求目标URL的头部,不请求实际的数据或者说正文内容。其主要用途是:
- 检查资源是否存在。
- 获取资源的元数据(如响应头中的
Content-Length
或Last-Modified
)。 - 测试有效性、可访问性和最近的修改时间。
要用GET
请求模拟HEAD
请求,在实际操作上有些困难,因为GET
请求的定义就是要获取完整的资源内容。但有一些策略可以接近:
-
请求参数中加标志:当请求资源时,在查询参数中添加特定的标志,让服务器知道这是一个
HEAD
伪请求。然后服务器只返回相关头部信息并终止连接,不发送实际的数据。fetch("/resource?headOnly=true")
-
使用Range头:虽然这并不是一个真正的模拟,但你可以尝试通过设置
Range
头来只请求资源的第一个字节,这在某种程度上接近了HEAD
请求,但仍然会获得少量的数据。fetch("/resource", {headers: {"Range": "bytes=0-0"} });
-
取消请求:使用XMLHttpRequest或Fetch API开始一个
GET
请求,但在接收到响应头之后立即取消它,这样就不会接收到正文内容。这不是一个特别高效的方法,并且可能不适用于所有的情境。
无论采用哪种策略,关键都是服务器的配合。如果服务器不支持这种模拟行为,那么客户端做出的努力都是徒劳的。
最佳的解决方案仍然是使用真正的HEAD
请求,除非某些特殊情况或限制使得你不能这样做。