在node.js中,如何获取Content-Length头以响应http.get()?

时间:2013-08-26 17:54:25

标签: javascript node.js

我有以下脚本,似乎节点不包括响应对象中的Content-Length标头。我需要知道消耗数据之前的长度,因为数据可能非常大,我宁愿不缓冲它。

http.get('http://www.google.com', function(res){    

    console.log(res.headers['content-length']); // DOESN'T EXIST
});

我已经遍布对象树,没有看到任何东西。所有其他标题都在“标题”字段中。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

www.google.com不会发送Content-Length。它使用chunked encoding,您可以通过Transfer-Encoding: chunked标题来判断。

如果您想要响应正文的大小,请收听res的{​​{1}}个事件,并将收到的缓冲区的大小添加到计数器变量中。当data触发时,您将拥有最终尺寸。

如果您担心响应较大,请在计数器超过多少字节时中止请求。

答案 1 :(得分:3)

并非每个服务器都会发送content-length标头。

例如:

http.get('http://www.google.com', function(res) {
    console.log(res.headers['content-length']); // undefined
});

但如果你要求SO:

http.get('http://stackoverflow.com/', function(res) {
    console.log(res.headers['content-length']); // 1192916
});

你正确地从响应中提取了这个标题,谷歌只是不在他们的主页上发送它(他们使用的是分块编码)。