Node.js HTTP Ограничение длины URL-адреса

Существует ли ограничение на размер при выполнении запросов HTTP GET в Node.js? И если да, то как я могу это изменить?

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>

То же самое, что и wget в PowerShell или Bash работает отлично.

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

Ответ 1

Существует встроенный лимит размера запроса, применяемый Node. Запрашиваемые заголовки + URI не должны превышать 80 кб.

Как это определено в 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 байтов или от ~ 48 КБ до 195 КБ.

Ответ 2

ОБНОВИТЬ

В более новых версиях NodeJS (v12.6. 0+) ограничение размера запроса заголовка по умолчанию составляет 8 КБ, что также влияет на размер заголовка ответа. Чтобы использовать размеры заголовков выше 8 КБ, вы можете использовать ключ --max-http-header-size 65535 (или любой другой размер, который вам нужен). Это подробно описано здесь.