7

我正在与 IIS Web 服务器建立 HTTP 连接,并发送一个 POST 请求,其中包含使用 Transfer-Encoding: chunked 编码的数据。当我这样做时,IIS 只是关闭连接,没有错误消息或状态代码。根据HTTP 1.1 规范

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

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

当我对 Apache 尝试相同的操作时,我得到一个“需要 411 长度”状态和一条消息说“禁止分块传输编码”。

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

4

5 回答 5

8

看看你的客户。

IIS 和 Apache 都支持使用分块传输编码的 POST 请求。您可以使用curl 实用程序验证这一点:

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

使用Wireshark验证传输是否分块

于 2009-07-30T19:26:30.560 回答
4

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

但我同意从文档中不清楚。

于 2008-12-03T21:13:32.867 回答
3

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

于 2011-12-21T19:55:03.713 回答
-1

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

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

我同意 MarkR 的观点,我一直认为分块编码只能用作响应,但文档确实使它听起来像是可以在请求或响应中使用。

于 2008-12-03T21:22:11.103 回答
-1

这个命令是来救我的!

C:\Windows\System32\Inetsrv\Appcmd.exe 设置配置 -section:httpCompression
-[name='gzip'].staticCompressionLevel:9 -[name='gzip'].dynamicCompressionLevel:4

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

于 2015-07-30T15:03:59.277 回答