我有一个简单的节点脚本来处理家庭自动化API中的一些数据。在上次更新之前一切都很顺利。现在,对于NodeVersion4.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响应分裂漏洞有关,但是我试着运行上面提到的脚本--安全恢复=CVE-2016-2216标志,但没有帮助。有什么想法吗?
发布于 2016-02-20 12:44:50
我找到了这个提交日志。问题似乎是Content-Length
和Transfer-encoding: chunked
头同时存在:
服务器同时发送内容长度标头和传输编码:块头,这违反了HTTP规范。
发布于 2019-07-11 22:59:14
正如前面的答案所述,这是按照HTTP标准进行节点设计。当我试图从运行在本地计算机上的角应用程序访问DEV服务器中的REST-API (一个内容配置调用)时,我遇到了这个问题。API没有添加这些标题、内容长度和传输编码。当应用程序也被部署到Dev服务器(在同一服务器中的REST和REST)时,这个问题得到了解决。
据我所知,如果两个标头都是在API中添加的,或者尝试在Server中部署应用程序,请删除两个标头。
这是关于这个问题的一个有用的链接- https://github.com/request/request/issues/2091
https://stackoverflow.com/questions/35525715
复制