我发现我们的 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/