nodejs http request "INVALID_CONSTANT" error

问题描述:

nodejs(4.x) http request 请求HTTP服务时,触发error事件,error.code是"INVALID_CONSTANT",并且收不到data事件。经问题排查和验证,发现当正文有内容但Content-Length没有设或者值不对,同时没有Transfer-Encoding: chunked就会导致INVALID_CONSTANT错误。解决方法:服务端采用非chunked方式则必须加Content-Length字段,如果服务端采用chunked方式的话则必须加Transfer-Encoding: chunked字段,如果这两个字段都没有则不能传正文可以只传请求头。

报错位置:

nodejs lib/_http_client.js: parser.execute(d)

function socketOnData(d) {
  var socket = this;
  var req = this._httpMessage;
  var parser = this.parser;

  assert(parser && parser.socket === socket);

  var ret = parser.execute(d);
  if (ret instanceof Error) {
    debug('parse error');
    freeParser(parser, req, socket);
    socket.destroy();
    req.emit('error', ret);
    req.socket._hadError = true;

把lib相关代码拷贝出来并增加调试打印,可以看到响应内容:

  console.log(d);
  console.log(d.toString());
  var ret = parser.execute(d);
  if (ret instanceof Error) {
    console.log(ret);
[2019-08-22 19:24:54.078][Worker:30758][INFO] <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 34 20 4e 6f 20 43 6f 6e 74 65 6e 74 0d 0a 53 65 72 76 65 72 3a 20 42 4c 42 2f 31 2e 30 2e 31 37 30 0d 0a 44 61 74 65 ... >
[2019-08-22 19:24:54.079][Worker:30758][INFO] HTTP/1.1 204 No Content
Server: XLX/3.0.370
Date: Thu, 22 Aug 2019 09:03:00 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
P3P: CP=" OTI DSP COR IVA OUR IND COM "

[]
[2019-08-22 19:24:54.082][Worker:30758][INFO] { [Error: Parse Error] bytesParsed: 450, code: 'HPE_INVALID_CONSTANT' }
发布了51 篇原创文章 · 获赞 3 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/pengpengzhou/article/details/100019071