根据 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。你的解释是什么?
HEAD 方法与 GET 方法相同,除了服务器在响应中不得返回消息正文。对于 HEAD 请求,在响应的 HTTP 标头中包含的元信息应该与对 GET 请求进行响应时发送的信息相同。该方法可以用于获取关于请求隐含实体的元信息,而无需传输实体本身。该方法经常用于测试超文本链接的有效性、可访问性和最近修改。
对于 HEAD 请求的响应可能是可缓存的,因为响应中包含的信息可以用于从资源中更新先前缓存的实体。如果新的字段值表明缓存的实体与当前实体不同(例如,由 Content-Length、Content-MD5、ETag 或 Last-Modified 的更改指示),那么缓存必须将缓存条目视为过期。
从这个定义来看,我们应该像相应的 GET 操作一样返回状态码 200,还是应该返回状态码 204 因为没有内容呢?
个人认为更好的解释应该使用状态码 204。你的解释是什么?
200
,则对于HEAD请求也应返回200。如果您的GET请求返回204,则应返回204。问题在哪里? - user1864610GET
操作不应返回204
,因为如果资源 / 集合存在,则内容是存在的。 然而,由于必须为空,所以HEAD
的内容必须为空,状态码将为204
。顺便提一下,从定义中可以看到这个“ SHOULD ”术语:HEAD 请求 SHOULD 与响应 GET 请求发送的信息相同。 因此,这种不同的状态码可能是GET
和HEAD
标头之间唯一的区别。 - T5i