Назад | Перейти на главную страницу

Есть ли ограничение на длину URL-адресов при использовании Amazon ELB? Если да, есть ли способ его увеличить?

Похоже, мы столкнулись с ошибкой из-за того, что Amazon ELB усекает длинный (более 1000 символов) URL-адрес.

Я просмотрел обычных подозреваемых, но не нашел обсуждения ограничений длины URL для Amazon ELB.

Есть ли ограничение на длину URL-адресов Amazon? Если да, то есть ли способ увеличить этот лимит?

Я протестировал это с помощью простого сценария bash на домене, который у меня работает за ELB:

S='a';
URL='http://example.com/?foo=';
while true;
do
  echo $URL$S | wc -c;
  curl -I "$URL$S";
  S=$S$S;
done

Некоторое время это работало нормально:

2081
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Date: Tue, 05 Feb 2013 15:01:44 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive

4129
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Date: Tue, 05 Feb 2013 15:01:46 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive

Но потерпел неудачу, когда преодолел барьер в 8192 длины:

8225
HTTP/1.1 414 Request-URI Too Large
Content-length: 337
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 05 Feb 2013 15:01:47 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive

16417
HTTP/1.1 414 Request-URI Too Large
Content-length: 337
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 05 Feb 2013 15:01:47 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive

Неудачные запросы были зарегистрированы Apache в другом файле, поскольку GET строка идет до Host: заголовок и, следовательно, Apache никогда не определял, какой виртуальный хост использовать.

Тем не менее, это был все еще отвечает Apache, а не ELB, даже до более 128 КБ за один GET строка. Полный запрос 128 КБ был зарегистрирован в файле журнала Apache по умолчанию. После 256 КБ curl не удалось обработать запрос.

Не похоже, что в Amazon ELB есть ограничение на длину URL.

Мы получили следующий ответ от AWS Support (форматирование мое):

Обратите внимание, что существует ограничение на длину URI для всех балансировщиков нагрузки, и, поскольку вы получаете ошибку 414, ваш запрос GET должен превышать указанный ниже предел.

Балансировщик нагрузки приложений (ALB)

Для ALB существует разница в ограничениях заголовков HTTP для заголовков HTTP / 1.x и заголовков HTTP / 2. См. Документацию по Ограничения заголовка HTTP.

Заголовки HTTP / 1.x для балансировщиков нагрузки приложений имеют следующие ограничения по размеру:

  • Строка запроса: 16K
  • Один заголовок: 16K
  • Весь заголовок: 64 КБ

Заголовки HTTP / 2 для балансировщиков нагрузки приложений имеют следующие ограничения по размеру:

  • Строка запроса: 8K
  • Один заголовок: 8K
  • Весь заголовок: 64 КБ

Классический балансировщик нагрузки (CLB)

Единственное ограничение, которое накладывает CLB, - это длина HTTP-команды (GET, POST и т. Д.), И она должна быть 127 байтов или меньше, любой глагол, больший, чем это, приведет к тому, что CLB вернет HTTP-ошибку 405 «METHOD_NOT_ALLOWED» .

Балансировщик сетевой нагрузки (NLB)

Поскольку NLB функционирует на четвертом уровне модели взаимодействия открытых систем (OSI), ограничений для HTTP-заголовка нет. Он пытается открыть TCP-соединение с выбранной целью на порту, указанном в конфигурации приемника.