【问题标题】:Node.js server Error: Parse Error at socketOnEnd (_http_server.js:455:20)Node.js 服务器错误:socketOnEnd 解析错误 (_http_server.js:455:20)
【发布时间】:2020-05-15 06:35:09
【问题描述】:

发现我们的Node服务互通(使用request)偶尔会报这个错误:

Error: Parse Error
at socketOnEnd (_http_server.js:455:20)
at Socket.emit (events.js:203:15)
at Socket.EventEmitter.emit (domain.js:448:20)
at endReadableNT (_stream_readable.js:1129:12)
at process._tickCallback (internal/process/next_tick.js:63:19)

_http_server.js 中进行了一些挖掘之后,原来是http 解析器完成错误。这意味着util socket close,http解析器无法正确解析http请求。

我们的服务日志显示它的客户端超时并关闭套接字,然后服务器报告此错误。所以我怀疑是这个request issue 导致了问题,但我没有进一步的证据。

另一个问题是,为什么 Node 服务器接收到错误的 http 请求并没有中止解析阶段并立即响应错误,而是挂在那里直到客户端超时并关闭套接字?

有人遇到同样的问题吗?

附言

使用节点版本:10.16.0

【问题讨论】:

    标签: node.js node-request


    【解决方案1】:

    在记录套接字数据后,我发现了格式错误的 http 请求。它缺少身体:

    POST /internals/topics/list HTTP/1.1\r\ncontent-type: application/json\r\nx-client-host: production/user-service-5d76d998d8-wr9ws\r\nHost: topic-service.prod:3000\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\ncontent-length: 117\r\nnewrelic:xxx\r\nConnection: close\r\n\r\n
    

    所以这确实是请求包问题,不再维护,我将使用 got 包代替。

    希望对遇到同样问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2017-12-15
      • 1970-01-01
      • 2011-05-28
      • 2012-07-20
      • 1970-01-01
      相关资源
      最近更新 更多