【问题标题】:Node.js HTTP Get URL Length limitationNode.js HTTP 获取 URL 长度限制
【发布时间】:2019-07-19 02:00:55
【问题描述】:

在 Node.js 中发出 HTTP GET 请求时,大小是否有限制?如果是这样,我该如何更改?

var url = "..." // very long, ~50'000 chars
http.get(url, function (res) {
    res.pipe(fs.createWriteStream("file.txt"));
});

给我这个:

<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>

在 PowerShell 或 Bash 中使用 wget 也可以正常工作。

$url = "..."
wget -outf file.txt $url

【问题讨论】:

  • 什么 URL 可能是 >50K 字符,这是 base64 url​​ 还是什么,如果是这样,请参阅:stackoverflow.com/questions/20267939/…
  • 某种 api 调用..它我知道相当大 ;-) 并且可能边缘疯狂

标签: javascript node.js http


【解决方案1】:

Node 有一个内置的请求大小限制。请求的标头 + URI 不应超过 80 kb。

正如http_parser.h#L55中定义的那样:

/* Maximium header size allowed */
#define HTTP_MAX_HEADER_SIZE (80*1024)

假设 UTF-8 字符可以介于 1 到 4 个字节之间,则包含 50 000 个字符的字符串的大小将介于 50 000 到 200 000 字节之间,或者从 ~48kb 到 195kb。

【讨论】:

  • 我们可以覆盖这个最大限制吗?我希望在我的应用程序中使用更多。
  • 用于表头的大小。 GET URL 长度是否有限制
  • @NewtonJoshua,据我所知。我刚刚启动了一个本地 node.js 服务器并创建了一个很长的 URL。当 URL + 请求标头大小超过 8.052 KB(即 8,052 字节)时,节点返回 431“请求标头字段太大”。
【解决方案2】:

更新

在较新版本的 NodeJS (v12.6.0+) 中,标头请求大小限制默认为 8kb,这也会影响响应标头大小。要使用大于 8KB 的标头大小,您可以使用开关 --max-http-header-size 65535(或您需要的任何大小)。 这在here有深入描述。

【讨论】:

  • 哦,天哪,这对我们来说非常重要。感谢您的提醒!
  • 有什么方法可以在运行时以编程方式完成吗?我现在可以将命令行开关添加到节点...
  • @Spock 我不确定,我在 package.json 文件中设置了我的设置。我认为 NodeJS 没有内置功能可以在启动后更改它。不过,您可以在 Node 启动之前编写一些更新启动命令或 package.json 的内容。
  • 如何启用/定义“开关”--max-http-header-size?只是在package.json 中的start 脚本中,例如nodemon app.js --max-http-header-size 65535?
  • @user1063287 我把它放在我的 package.json 中的命令之后 node --max-http-header-size 1048576 ./bin/www
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2010-10-17
  • 2010-09-19
  • 2011-01-18
  • 1970-01-01
  • 2012-12-01
  • 2011-05-15
相关资源
最近更新 更多