设置Transfer-Encoding标头不起作用,没有错误消息

时间:2013-08-20 09:27:07

标签: c# asp.net asp.net-mvc iis-7 iis-7.5

我通过在页面中间调用Response.Flush()以块的形式向客户端发送页面。这样浏览器将获得html的第一部分,并且可以在我的服务器继续处理其余请求时开始下载资源。

由于我的IIS服务器和客户端之间的某些第三方服务(CDN,防火墙,负载平衡等),我需要设置标头Transfer-Encoding: Chunked,以便他们知道响应将以块的形式返回。

我尝试通过调用Response.Headers.Add("Transfer-Encoding", "chunked");

来设置标头

由于某种原因,当我这样做时,即使直接联系我的IIS服务器,我也会在等待很长时间后返回空白页,而不会通过所有第三方。附加到进程调试时,我没有看到任何错误 删除'Transfer-Encoding'标头可以正常工作,但我需要为我正在使用的第三方提供此标题。

任何人都知道我如何在我的网络应用程序中设置此标题?

顺便说一句 - 我也尝试直接在IIS的“响应标头”部分设置此标头,并且在执行此操作时响应仍为空。

2 个答案:

答案 0 :(得分:1)

根据the description on Wikipedia,Chunked Transfer Encoding要求以特定方式对响应主体进行编码,所描述格式的要点之一是:

  

每个块以它嵌入的数据的八位字节数开始   表示为ASCII中的十六进制数,后跟可选项   接下来是参数(块扩展)和终止CRLF序列   通过块数据。该块由CRLF终止。如果大块   提供扩展,块大小以分号结束   后跟扩展名和可选的等号和值。

据我所知,调用Response.Flush()不会生成此特定标记。它只是将任何缓冲的响应内容清空到客户端。

您可以查看“服务器何时使用分块传输编码?”在这个答案中: https://stackoverflow.com/a/2711405/1236044

似乎暗示,使用正确的设置,IIS应该在需要时自动切换到Chunked Transfer Encoding

答案 1 :(得分:0)

如果禁用缓冲,服务器将使用分块传输编码:

context.Response.BufferOutput设为false

According to this question

您可能还需要设置Server.ScriptTimeout(以秒为单位)以避免脚本被中断。