HTTP传输编码和请求

HTTP传输编码和请求,http,http-headers,transfer-encoding,Http,Http Headers,Transfer Encoding,HTTP规范声明允许传输编码头用于请求-但是如果服务器不理解给定的传输编码,那么应该响应什么错误代码 据我所知,HTTP标准没有涵盖这种可能性,但可能我只是忽略了它。RFC有点不清楚,但我认为它应该是406不可接受。对于HTTP版本,带有无效的传输编码的请求格式不正确。因此,服务器应响应400错误请求未知传输编码应引发HTTP错误501“未实现”。 至少Apache就是这么做的 也看到 编辑:指向相应RFC部分的指针:我同意这个问题的答案并不明显,并且已经跟进了 更新:比约恩·H.正确地指出:

HTTP规范声明允许传输编码头用于请求-但是如果服务器不理解给定的传输编码,那么应该响应什么错误代码


据我所知,HTTP标准没有涵盖这种可能性,但可能我只是忽略了它。

RFC有点不清楚,但我认为它应该是406不可接受。

对于HTTP版本,带有无效的
传输编码的请求格式不正确。因此,服务器应响应
400错误请求

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

也看到


编辑:指向相应RFC部分的指针:

我同意这个问题的答案并不明显,并且已经跟进了

更新:比约恩·H.正确地指出:

RFC 2616第3.6节:

接收数据的服务器 带有传输编码的实体实体 不明白该不该回来 501(未实现),并关闭
连接

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


主要是个人意见


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

不理解分块编码应该是500内部服务器错误,而不是501,因为RFC-2616说服务器必须理解它


但是,如果服务器选择不接受包含分块正文的请求,并想为此责怪客户机,那么一种合法的方法是411所需长度——因为不能同时使用内容长度和传输编码,无论如何,如果不发送任何一个请求都是不实际的。

根据我对RFC的理解,只有在服务器无法交付与请求的“接受”标题匹配的内容时,才应使用代码406。这里的情况并非如此。501的描述中说:“服务器不支持满足请求所需的功能。当服务器无法识别请求方法且无法支持任何资源时,这是适当的响应。”因此,这似乎不是一个好的选择。这似乎是最好的选择。+1用于确认HTTP请求也支持
传输编码
,真是一个PITA。