为什么仅对某些客户端进行分块传输编码中的http响应

时间:2009-11-19 07:14:03

标签: asp.net-mvc iis-7 fiddler chunked-encoding

我在IIS 7上运行了一个asp.net mvc应用程序。我遇到的问题是,根据客户端的响应,可能会将响应(通过fiddler看到)视为“chunked transfer-encoding。”我不能理解为什么这只发生在我的一些客户身上(即使两台计算机在同一网络上使用相同的浏览器(IE 8)而不是每个人,反之亦然?

有人能解释一下吗?

对于此次更新很抱歉,但问题原因是用户如何到达服务器。如果用户通过vpn-connection连接到本地局域网,则将回避代理,否则将使用代理。这导致两种不同的结果。

2 个答案:

答案 0 :(得分:2)

如果过早刷新输出流,则在服务器端启用分块编码。您是否有任何特定于用户代理的代码可能正在调用Flush()?

答案 1 :(得分:1)

RFC 2616 says

  

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

Transfer-Encoding: chunked是为HTTP / 1.1定义的。你的一些客户是使用HTTP / 1.0甚至是(shudder)0.9吗?在这种情况下,服务器不得使用transfer-encoding,因为它不是协议的一部分。

虽然大多数现代客户端都了解HTTP / 1.1,但大多数客户在使用代理时都有降级到1.0的选项(由于历史原因 - 一些较旧的代理有错误的1.1实现)。因此,虽然浏览器可能理解1.1,但如果有指示,它可以请求1.0。

示例:MSIE 6+在“Internet选项”对话框中显示了此选项 - 选项卡Advanced - HTTP 1.1 settings - 复选框“Use HTTP 1.1”和“Use HTTP 1.1 through proxy connections”。

此外,没有为所有响应激活分块编码 - 通常服务器在未设置Content-Length时或在刷新输出缓冲区时将其打开。