在Web开发中,HTTP的“HEAD”动词有用吗?

60

我已经阅读了关于“HEAD”动词的w3.org规范文档,但我觉得我可能还是有些不理解。我无法看出它会有什么用处。

在Web开发中,HTTP的“HEAD”动词有用吗?

如果有用,那么它有什么作用呢?

3个回答

60

RFC2616中得知:

HEAD方法可以用于获取请求所涉及的实体的元信息,而无需传输实体本身。该方法通常用于测试超文本链接的有效性、可访问性和最近修改。

相比GET方法,HEAD方法优先使用是因为响应中没有消息体,这使它在想要确定内容是否有更改的情况下很有用——最后修改时间或内容长度的变化通常表示这一点。

此外,HEAD请求会提供有关服务器设置的一些信息(是否为IIS / Apache等),除非服务器被掩盖;当然,这在所有响应中都可以获得,但在不知道响应大小的情况下,尤其是在想要检查站点是否正常运行时,HEAD是最简单的方法。头请求也是确定站点是否可用的最简单方法;同样,消息体的无关性使HEAD成为理想的选择。

我不确定,但RSS / ATOM订阅阅读器会使用HEAD方法来确定源的内容是否发生变化。


4
添加一个例子:我正在构建一个“客户”API,通过REST API向多个应用程序提供数据。这些应用程序将定期检查客户是否已更新,但我们不想执行所有DB连接或在网络上保留重新发送整个客户端的操作。相反,我们重复使用HEAD请求在/customer/XYZ处调用API,让我们知道最后一次更改是什么时候。 - Mike Marcacci
想要添加另一个示例,即使这是一篇旧文章。ElasticSearch建议使用HEAD命令来查看文档是否存在。 - Darren Hoehna
你不应该使用HEAD方法来检查文档是否更改,而应该使用 If-Modified-SinceIf-None-Match(例如,在重新加载此页面时,查看浏览器网络日志中的“304 Not Modified”响应)。而且在HTTP/1.1版本中,HEAD方法(至少理论上)已经完全被 Range: bytes=0-0 替代。 - Søren Løvborg

30

在进行HTTP PUT/POST上传大量数据之前,可以使用HTTP HEAD预先对Web服务器进行身份验证。如果没有第一个头请求,您将向Web服务器发送两次大数据(因为第一次请求会返回带有WWW-authenticate标头的401未经授权响应)。


5

这主要是为了帮助浏览器和代理服务器判断是否可以使用缓存的网页文档,而不必下载整个文档(这样做会使缓存失去意义)。


7
现今的浏览器有这个功能吗?我原本以为他们只会使用"GET",但是会加上一个"If-Modified-Since"请求头。 - David
不知道。从我在Tamper Data中看到的,Firefox肯定不行。我想当涉及到更多的标准而不仅仅是修改时间时,这将会更有用,这将需要更多的代理而不是浏览器。 - chaos
大卫是正确的,除非有一个可以做到这一点的浏览器。这是不利的,因为响应将指示客户端是否应该下载内容,从而导致两个请求而不是一个。但对于其他HTTP客户端可能会有用。 - Vineet Reynolds
1
@chaos,是的,代理缓存可能会使用HEAD。 - Vineet Reynolds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接