流式传输文本数据时禁用Chrome缓冲

时间:2016-01-28 22:04:47

标签: google-chrome http streaming

我们有一个通过http流式传输文本数据的网站。它按以下方式设置:

  • 它没有做任何服务器端缓冲
  • Content-Typetext/plain
  • Transfer-Encodingchunked
  • 禁用压缩

使用普通curl或FireFox时,文本会从第一个字节流式传输到浏览器。但是在使用Chrome时,在发送1024个字节之前不会显示任何文本。在那之后,一切都会立即出现。

问题:有没有办法禁用此缓冲行为?

更多信息:这是一个简单的ASP.NET页面,演示了行为:

<%@ language=c# %>

<%
    Response.BufferOutput = false;
    Response.ContentType = "text/plain";

    for (int i=0; i<50; i++)
    {
        Response.Write("01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\r\n");
        System.Threading.Thread.Sleep(1000);
    }
%>

使用禁用压缩的web.config:

<configuration>
    <system.webServer>
        <urlCompression doStaticCompression="false" doDynamicCompression="false"/>
    </system.webServer>
</configuration>

我还有一个在http://bufferingtest.azurewebsites.net/运行的实时复制品。只需从Chrome和FireFox中点击它即可观察不同的行为。

2 个答案:

答案 0 :(得分:3)

尝试将Content-Typetext/plain切换为application/octet-stream

检查一下,进一步阅读:

Do I need Content-Type: application/octet-stream for file download?

此修复程序对我来说非常合适。我遇到了您正在描述的相同问题,其中发送编码为text/plain; charset=UTF-8的小文本块导致Chrome出现延迟,但在Firefox中则没有。将类型更改为application / octet可解决Chrome上的问题,而不会影响FireFox的性能。

答案 1 :(得分:3)

X-Content-Type-Options: nosniff添加到标题中,然后让我知道它是怎么回事。

根据Mozilla Docs

  

X-Content-Type-Options响应HTTP标头是使用的标记   服务器指示在广告中公布的MIME类型   不应更改Content-Type标头并予以遵循。这个   允许选择退出MIME类型嗅探,换句话说,它是一个   说网站管理员知道他们在做什么的方式。