2014-10-02 141 views
1

我有一个送分块响应每隔几两秒钟下列头测试节点服务器:浏览器不处理如Firefox分块响应,Safari浏览器

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并指定了一个函数来打印出responseTextonprogress事件。 这里是实现在不同浏览器中的不同之处。

在Firefox和Safari中,我收到类似于卷曲时的行为。每个“Hello World”都会触发一个进展事件。

在Chrome中,只有在接收到所有组块后才会触发onprogress事件,并在服务器端执行response.end()。当我尝试打印出responseText时,只打印出一个空字符串。

这里是客户端代码的样子:

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); 
} 
+0

很好的问题! – 2016-01-03 13:27:19

回答

2

Chrome和IE“嗅”所述数据以便检测mime类型(第一个256个字节我相信)。使用此来禁用该行为:

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

我刚被卡住了,也解决了我的问题。即使您发送超级奇怪的Content-Type标头,嗅探似乎也会发生。完全绊倒了我。在Safari/Firefox中不是这种情况。 – 2016-01-03 13:28:37