3

我有一个在 IIS 7 上运行的 asp.net mvc 应用程序。我遇到的问题是,根据客户端的不同,响应可能会被接收(通过提琴手看到)为“分块传输编码。我不明白为什么这只发生在我的一些客户身上(即使两台计算机在同一个网络上使用相同的浏览器(IE 8)而不是每个人,反之亦然?

谁能给我解释一下?

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

4

2 回答 2

2

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

于 2009-11-19T07:20:27.417 回答
1

RFC 2616 说

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

Transfer-Encoding: chunked是为 HTTP/1.1 定义的。您的某些客户端是否使用 HTTP/1.0 甚至(不寒而栗)0.9?在这种情况下,服务器不能使用传输编码,因为它不是协议的一部分。

尽管大多数现代客户端都了解 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 或刷新输出缓冲区时服务器将其打开。

于 2009-11-19T07:28:49.553 回答