Node.js 服务器错误 : Parse Error at socketOnEnd (_http_server. js:455:20)

标签 node.js node-request

我发现我们的 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解析器完成错误。这意味着当socket关闭时,http解析器无法正确解析http请求。

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

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

有人遇到同样的问题吗?

附注

使用 Node 版本:10.16.0

最佳答案

记录套接字数据后,我发现了格式错误的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 package。

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

关于Node.js 服务器错误 : Parse Error at socketOnEnd (_http_server. js:455:20),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61813166/

相关文章:

node.js - Nodejs Request Promise 如何显示状态码

node.js - 配置对 Google 我的商家 API 的请求以避免未经身份验证的错误

javascript - 无法在 Node js的模块导出中正确返回

javascript - 在没有 JS 库的情况下使 for 循环等待

javascript - 404 未找到 Node

javascript - 如何通过每个循环更改请求 url?

node.js - 使用 jwt-web token 和请求使用远程 api

json - 从 URL 请求 JSON 数据并将响应发送到文档

javascript - 对象构造 : test if this is instanceOf Object

java - 适合网络分析的数据库?