我有以下脚本,似乎节点不包括响应对象中的 Content-Length 标头。在使用数据之前我需要知道长度,因为数据可能非常大,我宁愿不缓冲它。
http.get('http://www.google.com', function(res){
console.log(res.headers['content-length']); // DOESN'T EXIST
});
我已经浏览了整个对象树,但什么也没看到。所有其他标题都在“标题”字段中。
有任何想法吗?
我有以下脚本,似乎节点不包括响应对象中的 Content-Length 标头。在使用数据之前我需要知道长度,因为数据可能非常大,我宁愿不缓冲它。
http.get('http://www.google.com', function(res){
console.log(res.headers['content-length']); // DOESN'T EXIST
});
我已经浏览了整个对象树,但什么也没看到。所有其他标题都在“标题”字段中。
有任何想法吗?
www.google.com 不发送Content-Length
. 它使用分块编码,您可以从Transfer-Encoding: chunked
标题中看出这一点。
如果您想要响应正文的大小,请侦听res
的data
事件,并将接收到的缓冲区的大小添加到计数器变量中。开火时end
,您将获得最终尺寸。
如果您担心较大的响应,请在您的计数器超过多少字节后中止请求。
并非每个服务器都会发送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
});
您正确地从响应中提取了该标头,谷歌只是没有在他们的主页上发送它(他们使用分块编码)。