【问题标题】:Amazon ALB - Redirect changes http method to GETAmazon ALB - 重定向将 http 方法更改为 GET
【发布时间】:2019-07-04 18:59:02
【问题描述】:

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

现在不知道是不是这个

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

谁能帮忙解决这个难题?

【问题讨论】:

    标签: amazon-web-services aws-application-load-balancer


    【解决方案1】:

    我认为这是预期的行为。

    您遇到的问题由以下几部分组成:

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

    让我再详细解释一下:

    • AWS 声明:“您可以根据需要将重定向配置为临时 (HTTP 302) 或永久 (HTTP 301)。” [1] 我不知道他们为什么将他们的响应代码仅限于这两个。这可能是您应该向 AWS 支持团队询问的问题。
    • “在 HTTP 1.1 中,实际上有一个状态码 (307),表示应使用相同的方法重复请求并发布数据。” [2]
    • 有一个线程解释了为什么用户代理将 302 解释为通过 GET 而不是 POST 重定向的请求。 [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]What is the correct behavior expected of an HTTP POST => 302 redirect to GET?
    [4]https://www.ietf.org/rfc/rfc2616.txt
    [5]https://linux.die.net/man/1/curl

    【讨论】:

    • 在我的情况下,我使用 Postman 作为客户端,显然有一个名为“遵循原始 HTTP 方法”的设置默认禁用。打开它后,POST 没有更改为 GET。但现在看起来它在重定向时缺少正文。
    • @Jenson 您是否最终找到了从 Postman 发布到 ALB 的解决方案?我和你有同样的问题。
    【解决方案2】:

    供参考: 我们最终设置了 rewrite resp。运行 NGINX 的代理上的重定向规则,其中 nginx.conf 文件提供了使用重定向 301 / 302 / 307 或 308 的完全灵活性。

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 1970-01-01
      • 2016-02-21
      • 2012-01-13
      • 2014-08-14
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 2015-12-26
      相关资源
      最近更新 更多