首页 > 解决方案 > AWS Application Load Balancer 中将 HTTP 重定向到 HTTPS 将 POST 请求转换为 GET 请求

问题描述

我使用 AWS 中的 Application Load Balancer 作为 API 网关:用于将请求转发到 AWS 中运行的不同应用程序。我已经为它配置了对 HTTP 和 HTTPS 的支持。HTTPS 侦听器包含请求转发的所有逻辑规则。HTTP 侦听器配置了一条规则:将所有流量重定向到 HTTPS 侦听器 ({host}:443/#{path}?#{query}) 并返回 301。

HTTPS 完美运行。HTTP 适用于 GET 请求。但是我发现对 HTTP 的 POST 请求在重定向到 HTTPS 时会转换为 GET 请求,这显然以 404 结束。

我在网上发现问题处于 301 状态(https://rtfm.co.ua/en/http-redirects-post-and-get-requests-and-lost-data/#The_root_cause_3xx_redirects_and_HTTP_RFC)。但不幸的是,AWS ALB 规则中没有选项可以重定向请求并返回 307 而不是 301。

那么有谁知道我该如何解决这个问题?谢谢!

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

解决方案


我们有类似的设置。我们所做的是让 HTTP 请求通过应用程序服务器,应用程序检测 HTTP 协议并执行基于软件的 301 重定向作为 POST 到 HTTPS。这将专门的协议处理从 ALB 转移到应用程序本身。效果很好。任何应用程序服务器都可以通过这种方式轻松设置。


推荐阅读