HTTP 'HEAD' 动词在 Web 开发中有用吗?
Posted
技术标签:
【中文标题】HTTP \'HEAD\' 动词在 Web 开发中有用吗?【英文标题】:Is the HTTP 'HEAD' verb useful in web development?HTTP 'HEAD' 动词在 Web 开发中有用吗? 【发布时间】:2010-11-30 12:31:27 【问题描述】:我已经阅读了w3.org spec on the 'HEAD' verb,我想我错过了一些东西。我看不出它会有什么用处。
HTTP 'HEAD' 动词在 Web 开发中有用吗?
如果有,怎么做?
【问题讨论】:
【参考方案1】:来自RFC2616:
这个方法(HEAD)可以用来获取 关于实体的元信息 由请求暗示而没有 转移实体主体本身。 这种方法常用于测试 有效性的超文本链接, 可访问性和最近 修改。
HEAD 优于 GET 的原因是由于响应中没有消息正文,因此在您想要确定内容是否发生变化的情况下使用它 - 最后修改时间或内容的变化长度通常表示这一点。
此外,HEAD 请求将提供有关服务器设置的一些信息(无论是 IIS/Apache 等),除非服务器被屏蔽;当然,这在所有响应中都可用,但 HEAD 是首选,尤其是当您不知道响应的大小时。 HEAD 也是确定站点是否正常运行的最简单方法;再次,消息正文的无关性使 HEAD 成为理想的候选人。
对此我不确定,但 RSS/ATOM 提要阅读器会使用 HEAD 而不是 GET 来确定提要的内容是否已更改。
【讨论】:
添加一个示例:我正在构建一个“客户”API,它通过 REST API 为多个应用程序提供数据。应用程序将希望定期检查客户是否已更新,但我们不想完成所有数据库连接或继续通过网络重新发送整个客户。相反,我们在 /customer/XYZ 处反复使用 HEAD 请求访问 API,让我们知道上次更改的时间。 想要添加另一个示例,即使这是一个旧帖子。如果您想查看文档是否存在,ElasticSearch 建议使用 HEAD 命令。 您不使用 HEAD 来查看文档是否已更改,而是使用If-Modified-Since
或 If-None-Match
(例如,在重新加载时查看浏览器网络日志中的“304 Not Modified”响应这一页)。从 HTTP/1.1 开始,HEAD(至少理论上)是完全冗余的,它允许Range: bytes=0-0
。【参考方案2】:
主要用于浏览器和代理来确定它们是否可以使用 Web 文档的缓存副本,而无需下载整个内容(这会破坏缓存的目的)。
【讨论】:
目前的浏览器有这样做的吗?我以为他们只会使用“GET”,但会包含“If-Modified-Since”请求标头。 不知道。从我在 Tamper Data 中可以看到,Firefox 肯定不会。我认为当涉及的标准比修改时间更多时它会更有用,这将比浏览器更多代理。 大卫是对的,除非有一个浏览器可以做到这一点。这是不利的,因为响应将指示客户端是否应该下载内容,从而导致 2 个请求而不是 1 个请求。不过可能对其他 HTTP 客户端有用。 @chaos,是的,代理缓存可能正在使用 HEAD。【参考方案3】:HTTP HEAD 还可用于在对一些大数据进行 HTTP PUT/POST 之前对 Web 服务器进行预身份验证。如果没有第一个 HEAD 请求,您将向 Web 服务器发送两次大数据(因为第一个请求将返回带有 WWW-authenticate 标头的 401 未授权响应)。
【讨论】:
以上是关于HTTP 'HEAD' 动词在 Web 开发中有用吗?的主要内容,如果未能解决你的问题,请参考以下文章