HTTP HEAD动词的状态码

17
根据 RFC http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html 的规定:
HEAD 方法与 GET 方法相同,除了服务器在响应中不得返回消息正文。对于 HEAD 请求,在响应的 HTTP 标头中包含的元信息应该与对 GET 请求进行响应时发送的信息相同。该方法可以用于获取关于请求隐含实体的元信息,而无需传输实体本身。该方法经常用于测试超文本链接的有效性、可访问性和最近修改。
对于 HEAD 请求的响应可能是可缓存的,因为响应中包含的信息可以用于从资源中更新先前缓存的实体。如果新的字段值表明缓存的实体与当前实体不同(例如,由 Content-Length、Content-MD5、ETag 或 Last-Modified 的更改指示),那么缓存必须将缓存条目视为过期。
从这个定义来看,我们应该像相应的 GET 操作一样返回状态码 200,还是应该返回状态码 204 因为没有内容呢?
个人认为更好的解释应该使用状态码 204。你的解释是什么?

似乎很清楚:如果您的GET请求返回200,则对于HEAD请求也应返回200。如果您的GET请求返回204,则应返回204。问题在哪里? - user1864610
1
问题如下: GET 操作不应返回 204,因为如果资源 / 集合存在,则内容是存在的。 然而,由于必须为空,所以 HEAD 的内容必须为空,状态码将为 204。顺便提一下,从定义中可以看到这个“ SHOULD ”术语:HEAD 请求 SHOULD 与响应 GET 请求发送的信息相同。 因此,这种不同的状态码可能是 GETHEAD 标头之间唯一的区别。 - T5i
是的,204意图与其标题“无内容”不一致。我认为它的命名不太恰当,但我怀疑我也想不到更好的命名。 - aaaaaa
1个回答

26
请看第10节,其中描述了状态码。代码200的说明包括示例,其中包括HEAD。因此,显然他们打算HEAD请求返回此代码。 204的说明解释了其目的:

此响应主要旨在允许进行操作的输入,而不会导致更改用户代理的活动文档视图,尽管任何新的或更新的元信息都应应用于当前在用户代理的活动视图中的文档。


我的错误...感谢您的回答。 - T5i

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