Che*_*eso 15 asp.net http transfer-encoding chunked-encoding
我可以简单地设置Transfer-Encoding
标题吗?
Response.Flush()
在某些时候打电话会导致这种情况发生吗?
编辑
不,我不能打电话给Response.Headers.Add("Transfer-Encoding","anything");
那个投掷.
还有其他建议吗?
Eam*_*nne 22
TL; DR:指定内容长度是实现快速第一个字节的最佳方式; 你将允许在TCP而不是HTTP级别进行分块.如果你不知道内容长度,设置context.Response.BufferOutput
为false
将发送输出,因为它使用chunked transfer-encoding写入输出流.
你为什么要设置Transfer-Encoding: chunked
?分块传输基本上是一种解决方法,允许发送事先不知道其内容长度的文档.ASP.NET,但是,在默认情况下缓存整个输出,因此不知道整体内容长度.
当然,HTTP是通过TCP分层的,在场景后面,无论如何通过将单片HTTP响应分成数据包来"分块" - 这意味着如果你预先指定内容长度并禁用输出缓冲,你将获得最佳延迟,无需HTTP级别的分块. 因此,当您知道内容长度时,不需要HTTP级别的块来提供快速的第一个字节.
虽然我不是HTTP的专家,我实现了一个简单的流媒体服务器与寻求支持,动态压缩,缓存等,以及我有一个快速的第一个字节的相关性合理把握-和分块一般是劣质如果你知道内容长度的选项- 几乎可以肯定ASP.NET不会让你手动设置它 - 这是没有必要的.
但是,如果您在传输之前不知道HTTP内容长度并且缓冲太昂贵,则关闭输出缓冲,并且可能服务器将根据需要使用分块传输编码.
服务器何时使用分块传输编码?我刚测试过,实际上如果context.Response.BufferOutput
设置为false
,并且未设置内容长度,则响应被分块; 在我对1.7MB内容编码的完全非科学快速测试中,这样的响应大1-2%:gzip xml文档.由于gzip依赖于上下文来减少冗余,我预计压缩率会受到更大的影响,但似乎分块并不一定会大大降低压缩率.
如果看一下在反射镜框架代码,似乎需要传送编码确实自动设置 - 即,如果缓冲关闭,并且没有内容长度是已知的,并且响应于HTTP/1.1请求,块传输编码用于.但是,如果服务器是IIS7并且这是一个工作者请求(?集成模式?),代码将分支到本机方法 - 可能具有相同的行为,但我无法验证.
归档时间: |
|
查看次数: |
35124 次 |
最近记录: |