为什么IIS不支持分块传输编码?

时间:2008-12-03 20:45:42

标签: apache http iis chunked-encoding

我正在与IIS Web服务器建立HTTP连接,并使用Transfer-Encoding:chunked发送带有编码数据的POST请求。当我这样做时,IIS只是关闭连接,没有错误消息或状态代码。根据{{​​3}},

  

所有HTTP / 1.1应用程序必须能够接收和解码“分块”传输编码

所以我不明白为什么(a)不处理该编码和(b)它没有发回状态代码。如果我更改发送Content-Length而不是Transfer-Encoding的请求,则查询会成功,但这并不总是可行。

当我对Apache尝试相同的事情时,我得到一个“需要411长度”的状态和一条消息“chunked Transfer-Encoding forbidden”。

为什么这些服务器不支持此编码?

5 个答案:

答案 0 :(得分:7)

看看你的客户。

IIS& Apache使用分块传输编码支持POST请求。您可以使用curl utility

进行验证
curl <upload-url> --form "upfile=@<local_file>" --header "Transfer-Encoding: chunked"

使用Wireshark

验证传输是否已分块

答案 1 :(得分:4)

我的理解是,chunked编码只能用于HTTP响应。分块请求主体将具有与1.0服务器不兼容的属性,并且在任何情况下,在用户代理已经发送请求之前,将无法知道服务器是1.0服务器。

但我同意文件中不清楚。

答案 2 :(得分:2)

它是双向的。尝试将图像2MB ++上传到photobucket并记录下来。他们的上传者上传到他们的apache服务器。

答案 3 :(得分:-1)

我唯一的猜测是他们没有出于对安全性的担忧而实施它。在一个天真的解决方案中,通过启动永远不会结束的多个分块传输来设置DOS攻击会很容易。一个可以解释DOS攻击的复杂解决方案可能不值得付出努力。

当然我不能代表Apache或IIS,你可以直接联系Apache团队:http://httpd.apache.org/bug_report.html

我同意MarkR的观点,我一直认为chunked编码只能用作响应,但文档肯定会让它听起来像是在请求或响应中使用。

答案 4 :(得分:-1)

这个命令来救我!

  

C:\ Windows \ System32 \ Inetsrv \ Appcmd.exe set config -section:httpCompression
     - [name =&#39; gzip&#39;]。staticCompressionLevel:9 - [name =&#39; gzip&#39;]。dynamicCompressionLevel:4

救了我的一天......希望它能帮助像我这样的人!