nodejs http request "INVALID_CONSTANT" error

3 篇文章 0 订阅

问题描述:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值