【问题标题】:http.get Parse Error, code: 'HPE_UNEXPECTED_CONTENT_LENGTH'http.get 解析错误,代码:'HPE_UNEXPECTED_CONTENT_LENGTH'
【发布时间】:2021-09-17 18:34:08
【问题描述】:

我有一个简单的节点脚本来处理来自我的家庭自动化 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 Response Splitting Vulnerability 相关,但我尝试运行带有 --security-revert=CVE-2016-2216 标志的脚本,但没有帮助。有什么想法吗?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    我找到了这个commit log。问题似乎是Content-LengthTransfer-encoding: chunked 标头同时存在:

    服务器正在发送 Content-Length 标头和 Transfer-Encoding: chunked 标头,这违反了 HTTP 规范。

    【讨论】:

    • 嗯,这就解释了。谢谢。
    • 对于 4.x 分支,提交在这里:github.com/nodejs/node/commit/0eae95eae3 http-parser 2.5.1。
    • 你好,@Vahagn。我正在尝试使用 https 请求发布帖子,但我也遇到了这个错误。我的请求没有标题。你能帮助我吗?谢谢。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2012-12-31
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2016-05-04
      相关资源
      最近更新 更多