我正在与IIS Web服务器建立HTTP连接,并使用Transfer-Encoding:chunked发送带有编码数据的POST请求。当我这样做时,IIS只是关闭连接,没有错误消息或状态代码。根据{{3}},
所有HTTP / 1.1应用程序必须能够接收和解码“分块”传输编码
所以我不明白为什么(a)不处理该编码和(b)它没有发回状态代码。如果我更改发送Content-Length而不是Transfer-Encoding的请求,则查询会成功,但这并不总是可行。
当我对Apache尝试相同的事情时,我得到一个“需要411长度”的状态和一条消息“chunked Transfer-Encoding forbidden”。
为什么这些服务器不支持此编码?
答案 0 :(得分:7)
看看你的客户。
IIS& Apache使用分块传输编码支持POST请求。您可以使用curl utility:
进行验证curl <upload-url> --form "upfile=@<local_file>" --header "Transfer-Encoding: chunked"
验证传输是否已分块
答案 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
救了我的一天......希望它能帮助像我这样的人!