Chrome没有处理像Firefox,Safari这样的分块响应

我有一个testing节点服务器每隔几秒发送一次分块的响应,使用下列标题:

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

每隔两秒钟,我就写出回应:

 response.write('Hello World'); 

当我在端点上进行curl时,每隔两秒就会得到一个块:

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

它的工作原理就像curl一样。

对于我在客户端的Javascript,我build立了一个新的XMLHttpRequest并分配一个函数来打印出它的onprogress事件的responseText 。 这是实现在不同浏览器上的不同之处。

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

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

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

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

为了检测MIMEtypes,Chrome和IE“嗅探”数据(我相信前256个字节)。 使用这个来禁用这个行为:

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