11

https://example.com/api/v1/ * へのリクエストを別のリージョンに REDIRECT (302) するように AWS ALB を構成しています。ただし、AWS ALB の REDIRECT 機能により、すべての http: メソッド (POST、PUT、...) が GET に変更されていることが判明しました。そのため、ターゲット サーバーでは、「GET」リクエストのみを受け取ります。

今はこれかどうかわからない

  1. 意図した動作
  2. AWS のバグ
  3. 設定の問題

パズルを解くのを手伝ってくれる人はいますか?

4

2 に答える 2

12

意図した動作だと思います。

発生している問題は、次の要素で構成されています。

  1. メソッドを変更するのは ALB ではなく、使用しているクライアントです。
  2. AWS ALB は、POST -> POST をリダイレクトするために必要な適切な HTTP ステータス コード (307) をサポートしていません。

もう少し詳しく説明しましょう。

  • AWS は、「必要に応じて、リダイレクトを一時 (HTTP 302) または永続 (HTTP 301) として構成できます。」[1] 応答コードをこれら 2 つだけに制限する理由がわかりません。これは、AWS サポート チームに問い合わせる必要があります。
  • 「HTTP 1.1 には、実際にはステータス コード (307) があり、同じメソッドを使用してリクエストを繰り返し、データを送信する必要があることを示します。」[2]
  • ユーザー エージェントが 302 を POST ではなく GET 経由でリダイレクトする要求として解釈する理由を説明するスレッドがあります。[3]
  • RFC 2616 のセクション「10.3.3 302 Found」で仕様を見つけることができます。[4]
  • この動作については、curl コマンドのマニュアル ページのセクション「-L/--location」および「--post302」にも記載されています。[5]

[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 => GET への 302 リダイレクトに期待される正しい動作は何ですか?
[4] https://www.ietf.org/rfc/rfc2616.txt
[5] https://linux.die.net/man/1/curl

于 2019-07-05T01:56:52.510 に答える