【问题标题】:HPE_HEADER_OVERFLOW exception when make http.request进行 http.request 时出现 HPE_HEADER_OVERFLOW 异常
【发布时间】:2020-01-14 10:35:11
【问题描述】:

当我尝试从 REST 服务获取数据时,我遇到如下 HPE_HEADER_OVERFLOW 错误:

var options = {
     host: "something.com",
     port: 80,
     path: "/somepath...",
     method: 'POST'
};

var request = http.request(options, function(res) {
	res.setEncoding('utf8');
	res.on('data', function(chunk) {
		// Do something
	});
	res.on('end', function() {
		// Do something 
	});
	request.on('error', function(e) {
		// Do something
	});
});

request.end();

options中path参数的长度为413。

有人遇到这个问题吗?这是服务端问题还是节点端问题?

请多多指教,万分感谢。

【问题讨论】:

  • 顺便说一句,我尝试在浏览器中进行 ajax 调用,效果很好。

标签: node.js http


【解决方案1】:

我想你会找到更多的东西here 和here

简而言之,Node.js 的标头大小限制为 80 KB,这对于 Web 上的大多数请求来说足够大(例如 Apache 有 8190 字节的限制)。 如果该服务以某种方式具有如此大的标头,您可以使用 -DHTTP_MAX_HEADER_SIZE=xxxx 参数重新编译节点。

【讨论】:

  • 您好,谢谢您的回答,这对我很有用,但并没有解决我的问题。我刚刚检查了标题大小,它没有超过限制。
  • 也许您已经超出系统限制或类似情况(selinux/apparmor/etc 或 Node 是使用一些非标准选项构建的)?如果您提供更多信息(至少 uri 和正文),我想重现此问题。
  • 感谢大佬提供更多建议,我刚刚解决了这个问题,这是因为 REST 服务总是使用 Content-Encoding: deflate,但是当我进行 API 调用时,我没有通过 header Accept-编码:gzip,放气。我不知道为什么会发生错误,但是问题已经解决了。
  • 哦,似乎不是正确的服务器内容。很高兴能以某种方式提供帮助。
【解决方案2】:

node app.js --max-http-header-size=80000

他们使标题大小可配置。检查以下链接。

https://nodejs.org/api/cli.html#cli_max_http_header_size_size

https://github.com/nodejs/node/issues/24692

【讨论】:

  • 我在 Visual Studio Code 的 launch.json 中添加了 --max-http-header-size=80000 作为运行时参数,终于让它工作了。我使用runtimeArgs: [ ... ],而不是args: [...]
【解决方案3】:

挖掘了一下,默认解析器节点使用的问题。解决方法是获取一个新的解析器:

npm install http-parser-js

然后,在您需要 http/https 之前,更改解析器。你最终必须得到类似的东西:

process.binding('http_parser').HTTPParser = require('http-parser-js').HTTPParser
const https = require('https')

如果由于某种原因你想使用 node 的默认解析器,假设你的文件名为 'app.js',你必须像这样使用 header 大小标志:

node --max-http-header-size=81000 app.js

【讨论】:

    【解决方案4】:

    我有同样的问题,但我的后端脚本是 PHP。我返回的响应头带有一些内部信息,包括 SQL 和内部 API url,因此响应头太大以至于超过了 max-header-size 并遇到了这个错误。在某些情况下,您可以考虑缩小响应标头大小

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 2019-09-21
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多