如何设置传输编码为分块,或明或暗地,在ASP.NET响应?

问题描述 投票:15回答:4

我可以简单的设置Transfer-Encoding头?

将调用Response.Flush()在某些时候导致这种情况发生的隐?


编辑 不,我不能叫Response.Headers.Add("Transfer-Encoding","anything");抛出。

任何其他建议?


有关: Enable Chunked Transfer Encoding in ASP.NET

asp.net http chunked-encoding transfer-encoding
4个回答
22
投票

TL; DR:指定内容的长度,以达到快速的第一个字节的最好方式;你会允许在TCP分块而不是HTTP水平。如果你不知道内容长度,context.Response.BufferOutput设置false因为它使用传输编码分块写入的输出流将发送输出。


你为什么要设置Transfer-Encoding: chunked?分块传输基本上是一个变通,允许发送文件,其内容长度在预先不知道。 ASP.NET,但是,在默认情况下缓存整个输出,因此不知道整体内容长度。

当然,HTTP层积在TCP和幕后TCP被分裂甚至单片HTTP响应成包“组块”无论如何 - 这意味着如果您指定的内容长度达阵和禁用输出缓冲,你会得到无需HTTP级分块最好的延迟。因此,你不需要HTTP级分块当你知道内容长度提供了快速的第一个字节。

虽然我不是HTTP的专家,我实现了一个简单的流媒体服务器与寻求支持,动态压缩,缓存等,以及我有一个快速的第一个字节的相关性合理把握 - 和分块一般是劣质选择,如果你知道内容的长度 - 这几乎肯定是为什么ASP.NET不会让你手动设置 - 它只是没有必要的。

但是,如果你不知道HTTP内容长度之前传输和缓冲太贵,您关闭输出缓冲想必服务器将必然采用分块传输编码。

什么时候使用服务器块传输编码?我只是测试,实际上如果context.Response.BufferOutput设置为false,当没有设置内容长度,响应分块;这样的反应是在内容编码一个1.7MB的我的完全非科学快速测试大1-2%:gzip的XML文档。由于gzip的依赖于上下文来减少冗余,我预料的压缩比,以承受更多,但似乎分块并不必然大大降低了压缩比。

如果看一下在反射镜框架代码,似乎需要传送编码确实自动设置 - 即,如果缓冲关闭,并且没有内容长度是已知的,并且响应于HTTP / 1.1请求,块传输编码用于。但是,如果服务器IIS7,这是一个工人请求(集成模式?),代码跳转到一个本地方法 - 可能具有相同的行为,但我无法验证。


0
投票

它看起来像你需要设置IIS这一点。 IIS 6在配置数据库属性AspEnableChunkedEncoding,你可以在http://msdn.microsoft.com/en-us/library/aa965021(VS.90).aspx参阅MSDN上的IIS 7映射此。这将使您设置传送编码:在你的头分块。我希望这有帮助。


0
投票

虽然你设置缓冲区为false,并留出空白的内容长度,你需要确保你已禁用“动态内容压缩”功能的IIS7使分块响应工作。此外,客户端浏览器至少应该有HTTP 1.1分块..模式将不会工作HTTP 1.0


0
投票

将Response.Buffer = FALSE

这将设置HTTP头“枢纽换乘编码:分块”,并发送响应每个被叫回复于

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.