http.get 解析错误,代码:“HPE_UNEXPECTED_CONTENT_LENGTH”

http.get Parse Error, code: 'HPE_UNEXPECTED_CONTENT_LENGTH'

本文关键字:HPE UNEXPECTED CONTENT LENGTH get 错误 代码 http      更新时间:2023-09-26

>我有一个简单的节点脚本来处理来自家庭自动化API的一些数据。在上次节点更新之前一切正常。现在,对于 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 响应拆分漏洞有关,但我尝试运行带有 --security-revert=CVE-2016-2216 标志的脚本,但它没有帮助。有什么想法吗?

我找到了这个提交日志。问题似乎Content-Length并且Transfer-encoding: chunked标头一起存在:

服务器正在发送内容长度标头和传输编码:分块标头,这违反了 HTTP 规范。

如前面的回答所述,这是根据HTTP标准的节点设计。 当我尝试从本地机器中运行的 Angular 应用程序访问 DEV 服务器中的 REST-API(内容处置调用)时,我遇到了这个问题。API 未添加这些标头内容长度和传输编码。当应用也部署到开发服务器(Angular 应用和 REST API 在同一服务器中)时,该问题已解决。

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

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