我正在与IIS Web服务器建立HTTP连接,并发送带有使用Transfer-Encoding编码的数据的POST请求:分块。当我这样做时,IIS只是关闭连接,没有错误消息或状态码。按照HTTP 1.1 spec,为什么IIS不支持分块传输编码?
所有HTTP/1.1应用程序必须能够接收和解码的“分块”传输编码
所以我不明白为什么它(一)不处理该编码和(b)它不发送状态码。如果我更改发送Content-Length而不是Transfer-Encoding的请求,则查询成功,但这并非总是可行。
当我对Apache尝试同样的事情时,我得到一个“411 Length Required”状态和一条消息,表示“chunked Transfer-Encoding forbidden”。
为什么这些服务器不支持这种编码?
客户端可以通过发送HEAD请求等来询问服务器。阅读RFC 2616第3.6节指出,服务器在收到它不理解的传输编码头时必须发送501响应。 3.6.1节说,所有HTTP 1.1应用程序必须能够接收和解码分块传输编码。所以对我来说似乎很清楚 - 客户端到服务器的通信可以被分块。常见的情况是文件上传。 – Cheeso 2009-07-06 14:49:37
原始海报没有提及它们使用的是哪个版本的IIS,但IIS 7明确支持传入的分块数据 - 我有一个C++应用程序将请求作为分块数据发送到IIS 7,没有任何问题 – 2010-11-30 18:43:34
我认为你不正确。服务器和客户端应该支持分块(这并不意味着它们可以)。你认为不兼容会导致无效,因为任何支持http1.1的客户端也应该知道如何与http1.0服务器通信。请参阅:http://www.jmarshall.com/easy/http/#http1.1s3和:http://www.atnan.com/2008/8/8/transfer-encoding-chunked-chunky-http和:http ://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6(也可参阅第3.6.1节) – 2011-02-17 23:58:03