首页 > 解决方案 > Amazon ALB - 重定向将 http 方法更改为 GET

问题描述

我有一个 AWS ALB 配置为它应该将https://example.com/api/v1/ * 的请求重定向 (302) 到另一个区域。然而,事实证明,hte AWS ALB 的 REDIRECT 功能正在将所有 http: 方法(POST、PUT、...)更改为 GET - 所以在目标服务器上,我只收到“GET”请求。

现在不知道这是不是

  1. 预期行为
  2. AWS 中的一个错误
  3. 设置问题

任何人都可以帮助解决这个难题吗?

标签: amazon-web-servicesaws-application-load-balancer

解决方案


我认为这是预期的行为。

您遇到的问题由以下内容组成:

  1. 更改方法的不是 ALB,而是您正在使用的客户端。
  2. AWS ALB 不支持重定向 POST -> POST 所需的正确 HTTP 状态代码,即 307。

让我更详细地解释一下:

  • AWS 声明:“您可以根据需要将重定向配置为临时 (HTTP 302) 或永久 (HTTP 301)。” [1] 我不知道他们为什么将他们的响应代码仅限于这两个。这可能是您应该询问 AWS 支持团队的问题。
  • “在 HTTP 1.1 中,实际上有一个状态码 (307),表示应该使用相同的方法重复请求并发布数据。” [2]
  • 有一个线程解释了为什么用户代理将 302 解释为通过 GET 而不是 POST 重定向的请求。[3]
  • 您可以在 RFC 2616 的“10.3.3 302 Found”部分找到规范。[4]
  • 您还可以在“-L/--location”和“--post302”部分下的 curl 命令手册页上阅读有关此行为的信息。[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 => 302 重定向到 GET 的正确行为是什么?
[4] https://www.ietf.org/rfc/rfc2616.txt
[5] https://linux.die.net/man/1/curl


推荐阅读