Javascript 在node.js中,如何获取内容长度头以响应http.get()?
我有下面的脚本,节点似乎没有在响应对象中包含Content-Length头。在使用数据之前,我需要知道数据的长度,因为数据可能非常大,所以我宁愿不缓冲它Javascript 在node.js中,如何获取内容长度头以响应http.get()?,javascript,node.js,Javascript,Node.js,我有下面的脚本,节点似乎没有在响应对象中包含Content-Length头。在使用数据之前,我需要知道数据的长度,因为数据可能非常大,所以我宁愿不缓冲它 http.get('http://www.google.com', function(res){ console.log(res.headers['content-length']); // DOESN'T EXIST }); 我已经浏览了所有的对象树,没有看到任何东西。所有其他标题都在“标题”字段中 有什么想法吗?不是每台
http.get('http://www.google.com', function(res){
console.log(res.headers['content-length']); // DOESN'T EXIST
});
我已经浏览了所有的对象树,没有看到任何东西。所有其他标题都在“标题”字段中
有什么想法吗?不是每台服务器都会发送
内容长度
标题
例如:
http.get('http://www.google.com', function(res) {
console.log(res.headers['content-length']); // undefined
});
但如果你要求这样做:
http.get('http://stackoverflow.com/', function(res) {
console.log(res.headers['content-length']); // 1192916
});
您正确地从响应中提取了标题,google只是不在其主页上发送标题(他们使用分块编码)。www.google.com不发送
内容长度。它使用,您可以通过传输编码:chunked
头来判断
如果需要响应正文的大小,请收听res
的data
事件,并将接收到的缓冲区大小添加到计数器变量中。当end
激发时,您拥有最终大小
如果您担心响应过大,请在计数器超过多少字节后中止请求。删除一个for(var k in res.headers){console.log(k,res.headers[k]);}以查看报头中可用的所有键。可能是大写。谢谢,但我已经检查了对象树,看到了除内容长度标题之外的所有内容。@CharlieKey-Ouch。我正在使用fiddler检查响应,但没有意识到fiddler正在添加标题。@迈克:是的,如果fiddler未处于流模式,它将在内部缓冲整个响应,然后将内容长度
标题发送到浏览器。单击工具栏中的“流”按钮,Fiddler将不会执行此操作。