5

HTTP 规范规定,请求允许使用 Transfer-Encoding 标头 - 但是如果服务器不理解给定的 Transfer-Encoding,它应该响应什么错误代码。

据我所知,HTTP 标准并未涵盖这种可能性,但也许我只是忽略了它。

4

6 回答 6

4

未知的传输编码应引发 HTTP 错误 501“未实现”。至少 Apache 就是这样做的。

另请参阅http://argray.com/unixfaq/httpd_error_codes.shtml

编辑:指向相应 RFC 部分的指针:http: //www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2

于 2009-03-28T15:18:28.097 回答
3

我同意这个问题的答案并不明显,并且已经跟进了HTTP WG 的邮件列表

更新:Björn H. 正确地指出:

RFC 2616 的第 3.6 节:

接收到带有它不理解的传输编码的实体主体的服务器应该返回 501(未实现),并关闭
连接。

所以它确实已经解决了这个问题。

于 2009-03-30T12:00:44.017 回答
1

主要是个人意见。

我一直认为 5xx 错误是实际的编程错误,就像什么东西摔倒了一样。如果服务器不理解请求,我会说 4xx 错误是更好的响应,因为问题在于请求不是服务器上的失败进程。我不确定是哪个 4xx,但有几个,所以选择一个应该不难。

于 2012-10-19T01:09:46.537 回答
0

Transfer-EncodingHTTP 版本无效的请求格式错误。因此,服务器应以400 Bad Request.

于 2009-03-28T15:11:35.137 回答
0

可以说无法理解分块编码应该是500 Internal Server Error而不是 501,因为 RFC-2616 说服务器必须理解它。

但是,如果服务器选择不接受带有分块正文的请求,并且它想为此责备客户端,那么合法的一种方法是411 Length Required ——因为不能在以下位置使用 Content-Length 和 Transfer-Encoding同时,无论如何都发送请求是不切实际的。

于 2012-10-30T13:35:07.937 回答
-1

RFC 有点不清楚,但恕我直言,它应该是406 Not Acceptable

于 2009-03-28T15:10:35.200 回答