Pau*_*ulC 4 html internet-explorer http http-status-code-204 microsoft-edge
我的PHP代码通过发送HTTP状态404响应或204响应来处理典型的HTTP HEAD请求。这对我来说似乎是正确的,因为RFC7231将HTTP状态204指定为:
6.3.5。204没有内容
状态码204(无内容)指示服务器已成功满足请求,并且响应有效内容正文中没有其他要发送的内容。应用请求的操作后,响应头字段中的元数据引用目标资源及其选择的表示形式。
204响应允许服务器指示该操作已成功应用于目标资源,同时暗示用户代理不需要遍历其当前“文档视图”(如果有)...
204响应由标头字段之后的第一个空行终止,因为它不能包含消息正文...
https://tools.ietf.org/html/rfc7231#section-6.3.5
由于用户代理仅请求标头而不是文件本身,因此204似乎合适。
当<object>元素具有data属性的URL时,MSIE / Edge最初会发出HTTP HEAD请求,以便通过响应标头确定内容类型。另一个MS怪癖是有道理的,因为它允许浏览器在接收内容之前预先加载所需的处理程序。当它收到对HEAD请求的适当响应时,它将为文件本身发出HTTP GET请求。
现在,如果不是因为这不是一个太大的问题...
当MSIE / Edge收到对其HEAD请求的204响应时,它将其视为错误并中止加载文件。
不用说,这对发现(过程和发现本身)非常令人沮丧。
我是否误解了204响应的目的或用途?我知道行业用途经常与规格有所不同,但这似乎...是错误的。
当您使用HEAD返回204时,您是在告诉用户代理,如果要执行GET,那么它也会得到204,因此没有要检索的内容。从用户代理的角度来看,执行GET是没有意义的,因为HEAD检索了所有可用的信息。
如果执行GET请求返回200,则HEAD也应返回200。