在node.js中,如何获取Content-Length头来响应http.get()?
我有下面的脚本,好像节点没有在响应对象中包含Content-Length标头。 在使用数据之前,我需要知道长度,因为数据可能相当大,所以我宁愿不缓冲它。
http.get('http://www.google.com', function(res){ console.log(res.headers['content-length']); // DOESN'T EXIST });
我遍历了对象树,没有看到任何东西。 所有其他标题都在“标题”字段中。
有任何想法吗?
http://www.google.com不会发送Content-Length
。 它使用分块编码 ,你可以通过Transfer-Encoding: chunked
header来分辨。
如果需要响应主体的大小,请监听res
的data
事件,并将接收到的缓冲区的大小添加到计数器variables中。 当end
时,你有最后的大小。
如果你担心大的响应,一旦你的计数器超过了多less字节,就中止请求。
不是每个服务器都会发送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 });
你正确地从响应拉头,谷歌只是不会发送到他们的主页(他们使用分块编码)。
- 使用Grunt和Node.js构buildAngularJS UI-Grid时遇到困难
- 将非用户字段添加到有效内容以用于JWT令牌
- node.js async.eachSeries太早调用最终callback
- TokenError:代码已被兑换,TokenError:Bad Request – 护照Google OAuth 2
- Firebase注册了用户 – 将用户存储在注册用户中
- 如何使用Express和MongoDB将json从nodejs服务器发送到客户端js文件
- 如果您使用2个级别的URL,Express会在注射中添加URL的第一部分?
- RethinkDB / horizon:经过一些使用得到400错误的请求错误导致ReqlRuntimeError.ReqlError 后重新启动
- Socket.io与响应{“代码”:0,“消息”:“传输未知”}的错误的请求?