我有一个测试节点服务器,它每隔几秒就会发送一个带有以下标题的分块响应:
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}}
答案 0 :(得分:3)
为了检测mime类型,Chrome和IE都会“嗅探”数据(我认为的前256个字节)。使用此选项可禁用该行为:
response.setHeader('X-Content-Type-Options', 'nosniff');