Amazon ALB - Redirect меняет метод http на GET - PullRequest
1 голос
/ 04 июля 2019

У меня есть AWS ALB, настроенный таким образом, что он должен перенаправить (302) запросы на https://example.com/api/v1/* в другой регион. Однако, оказывается, что функция REDIRECT hte AWS ALB меняет все http: методы (POST, PUT, ...) на GET - поэтому на целевом сервере я получаю только запросы «GET».

Теперь я не знаю, является ли это

  1. предполагаемое поведение
  2. ошибка в AWS
  3. проблема с настройками

Может кто-нибудь помочь решить головоломку?

1 Ответ

0 голосов
/ 05 июля 2019

Я думаю, что это предполагаемое поведение.

Проблема, с которой вы столкнулись, состоит из следующего:

  1. Метод изменяет не ALB, а клиент, которого вы используете.
  2. AWS ALB не поддерживает правильный код состояния HTTP, который требуется для перенаправления POST -> POST, равного 307.

Позвольте мне объяснить немного подробнее:

  • AWS заявляет: «Вы можете настроить перенаправление как временное (HTTP 302), так и постоянное (HTTP 301) в зависимости от ваших потребностей». [1] Я не знаю, почему они ограничивают свои коды ответов только этими двумя. Об этом, вероятно, следует обратиться в службу поддержки AWS.
  • "В HTTP 1.1 фактически существует код состояния (307), который указывает, что запрос должен повторяться с использованием того же метода и данных поста." [2]
  • Существует поток, который объясняет, почему пользовательские агенты интерпретируют 302 как запрос на перенаправление через GET вместо POST. [3]
  • Вы можете найти спецификацию в RFC 2616, раздел "10.3.3 302 Найдено". [4]
  • Вы также можете прочитать об этом поведении на странице руководства команды curl в разделах "-L / - location" и "--post302".

[1] https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#redirect-actions
[2] https://softwareengineering.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect
[3] Какое правильное поведение ожидается при перенаправлении HTTP POST => 302 на GET?
[4] https://www.ietf.org/rfc/rfc2616.txt
[5] https://linux.die.net/man/1/curl

...