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] 
[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' }

 

你可能感兴趣的:(nodejs,http,nodejs,http,request)