node.js Веб-приложение Azure возвращает 400 для длинных URL-адресов - PullRequest
1 голос
/ 15 июня 2019

Я размещаю приложение node.js в веб-приложении Azure. Это работает хорошо, за исключением того, что сервер всегда возвращает HTTP 400, если запрос слишком длинный (т. Е. Длинный URL или много заголовков).

Кажется, что ошибка возвращается шлюзом Kestrel, не доходя до моего приложения, и это происходит, если длина запроса превышает 2581 байт. Та же проблема не возникает при локальном запуске. Это запрос GET, и не имеет значения, является ли URL длинным или длинные заголовки.

Мое приложение просто возвращает текущее время:

// Module dependencies
let http = require('http');

http.createServer(function (request, response) {
    console.log('request ', request.url);

    response.write("Request served at " + new Date().toISOString());
    response.end();
}).listen(80);

Если я запрашиваю GET /anything ответ будет таким, как ожидалось. Однако, если я сделаю GET /{any_very_long_path} (или включу заголовок с длинным значением), это не получится

Почему Azure ограничивает длину запроса следующим образом? Та же проблема не возникает при размещении приложения ASP.NET.

1 Ответ

0 голосов
/ 20 июня 2019

Если я запрашиваю GET /anything, ответ будет таким, как ожидалось.

Однако, если я сделаю GET /{any_very_long_path} ( или включу заголовок с длинным значением ), произойдет сбой.

Я считаю, что проблема связанана эту проблему @ GitHub , в которой упоминается:

На нашем сайте у нас есть довольно большие куки в некоторых сценариях (это может быть не очень хорошо), и мы столкнулись со многими 400 http ошибок со вчерашнего дня.

Это потому, что есть жестко заданный предел 8KB (HTTP_MAX_HEADER_SIZE), все большее возвращает код ошибки 400 ...

Документация по Nodejs: http.maxHeaderSize

Свойство только для чтения, задающее максимально допустимый размер заголовков HTTP в байтах.По умолчанию 8 КБ.Настраивается с помощью опции --max-http-header-size CLI.

Решение:

Вы можете попробовать использовать опцию --max-http-header-size CLI в качестве упоминания в Документах.

Помните, что есливы используете промежуточный обратный прокси (например, NGINX), вам также придется увеличить максимальный размер заголовка ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...