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
(или любой другой размер, который вам нужен). Это подробно описано здесь.