8

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

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

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

我已经浏览了整个对象树,但什么也没看到。所有其他标题都在“标题”字段中。

有任何想法吗?

4

2 回答 2

8

www.google.com 不发送Content-Length. 它使用分块编码,您可以从Transfer-Encoding: chunked标题中看出这一点。

如果您想要响应正文的大小,请侦听resdata事件,并将接收到的缓冲区的大小添加到计数器变量中。开火时end,您将获得最终尺寸。

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

于 2013-08-26T18:00:52.370 回答
3

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

例如:

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

您正确地从响应中提取了该标头,谷歌只是没有在他们的主页上发送它(他们使用分块编码)。

于 2013-08-26T17:59:44.667 回答