Chrome无法处理像Firefox,Safari这样的分块响应

时间:2014-10-02 15:55:53

标签: javascript ajax node.js google-chrome xmlhttprequest

我有一个测试节点服务器,它每隔几秒就会发送一个带有以下标题的分块响应:

response.setHeader('Content-Type', 'text/plain')
response.setHeader('Transfer-Encoding', 'chunked')

我每两秒钟写一次回复:

response.write('Hello World');

当我对端点进行卷曲时,我每隔两秒就会收到一个块:

Hello World
(wait two seconds)
Hello World
(wait two seconds)
Hello World

它应该像卷曲一样。

对于我在客户端的Javascript,我设置了一个新的XMLHttpRequest并指定了一个函数来打印responseText onprogress事件的response.end()。 以下是不同浏览器的实现情况。

在Firefox和Safari中,我的行为与我卷曲时的行为相似。 onprogress事件将为每个“Hello World”触发。

在Chrome中,只有在收到所有块并且我在服务器端执行responseText时才会触发onprogress事件。当我尝试打印出var xhr = new XMLHttpRequest() xhr.onprogress = function() { // Firefox, Safari prints out an accumulation of the chunks // Chrome prints out an empty string console.log(xhr.responseText); } 时,只打印出一个空字符串。

以下是客户端代码的样子:

{{1}}

1 个答案:

答案 0 :(得分:3)

为了检测mime类型,Chrome和IE都会“嗅探”数据(我认为的前256个字节)。使用此选项可禁用该行为:

response.setHeader('X-Content-Type-Options', 'nosniff');