http.get Parse Error,代码:'HPE_UNEXPECTED_CONTENT_LENGTH'

时间:2016-02-20 16:15:32

标签: javascript node.js

我有一个简单的节点脚本来处理家庭自动化API中的一些数据。一切正常,直到最后一次Node更新。现在,使用Node版本4.3.0或5.6.0,http模块给出了这个错误:

{ [Error: Parse Error] bytesParsed: 193, code: 'HPE_UNEXPECTED_CONTENT_LENGTH' }

导致错误的API调用示例,它只返回一个数字(温度):

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 5
Content-Type: application/json
Transfer-Encoding: chunked

21.81

重现错误的代码:

const http = require("http");
const url = "http://127.0.0.1:8083/ZWaveAPI/Run/devices[11].instances[2].commandClasses[49].data[1].val.value";

http.get(url, (res) => {
    // consume response body
    res.resume();
}).on("error", (e) => {
    console.log(e);
});

我认为该错误与CVE-2016-2216 Response Splitting Vulnerability有关,但我尝试运行脚本并提到 - security-revert = CVE-2016-2216 标志,但它没有救命。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我找到了commit log。问题似乎是Content-LengthTransfer-encoding: chunked标题一起存在,

答案 1 :(得分:0)

如先前的回答所述,这是根据HTTP标准进行的节点设计。当我尝试从在本地计算机上运行的Angular App访问DEV服务器中的REST-API(内容处置调用)时遇到了此问题。 API未添加这些标头Content-Length和Transfer Encoding。 将应用程序也部署到Dev服务器(同一服务器中的Angular App和REST API)时,该问题已解决。

据我了解,如果在API中同时添加了两个标头,则删除该标头 或尝试在服务器中部署应用。

这是有关此问题的有用链接-https://github.com/request/request/issues/2091