HTTP 规范规定,请求允许使用 Transfer-Encoding 标头 - 但是如果服务器不理解给定的 Transfer-Encoding,它应该响应什么错误代码。
据我所知,HTTP 标准并未涵盖这种可能性,但也许我只是忽略了它。
HTTP 规范规定,请求允许使用 Transfer-Encoding 标头 - 但是如果服务器不理解给定的 Transfer-Encoding,它应该响应什么错误代码。
据我所知,HTTP 标准并未涵盖这种可能性,但也许我只是忽略了它。
未知的传输编码应引发 HTTP 错误 501“未实现”。至少 Apache 就是这样做的。
另请参阅http://argray.com/unixfaq/httpd_error_codes.shtml
编辑:指向相应 RFC 部分的指针:http: //www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2
我同意这个问题的答案并不明显,并且已经跟进了HTTP WG 的邮件列表。
更新:Björn H. 正确地指出:
RFC 2616 的第 3.6 节:
接收到带有它不理解的传输编码的实体主体的服务器应该返回 501(未实现),并关闭
连接。所以它确实已经解决了这个问题。
主要是个人意见。
我一直认为 5xx 错误是实际的编程错误,就像什么东西摔倒了一样。如果服务器不理解请求,我会说 4xx 错误是更好的响应,因为问题在于请求不是服务器上的失败进程。我不确定是哪个 4xx,但有几个,所以选择一个应该不难。
Transfer-Encoding
HTTP 版本无效的请求格式错误。因此,服务器应以400 Bad Request
.
可以说无法理解分块编码应该是500 Internal Server Error而不是 501,因为 RFC-2616 说服务器必须理解它。
但是,如果服务器选择不接受带有分块正文的请求,并且它想为此责备客户端,那么合法的一种方法是411 Length Required ——因为不能在以下位置使用 Content-Length 和 Transfer-Encoding同时,无论如何都发送请求是不切实际的。
RFC 有点不清楚,但恕我直言,它应该是406 Not Acceptable。