在 AWS Application Load Balancer 中将 HTTP 重定向到 HTTPS 将 POST 请求转换为 GET 请求

Redirection of HTTP to HTTPS in the AWS Application Load Balancer converts POST requests to GET requests

我在 AWS 中使用应用程序负载均衡器作为 API 网关:用于将请求转发到 AWS 中的不同应用程序 运行。我已将其配置为同时支持 HTTP 和 HTTPS。 HTTPS 侦听器包含请求转发的所有逻辑规则。 HTTP 侦听器配置了一条规则:将所有流量重定向到 HTTPS 侦听器 ({host}:443/#{path}?#{query}) 和 return 301.

HTTPS 完美运行。并且 HTTP 可以很好地处理 GET 请求。但是我发现POST对HTTP的请求在重定向到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 规则中没有选项可以将请求重定向到 return 307 而不是 301。

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

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

启用 http 到 https 重定向时,我也遇到了同样的问题。只需禁用自动 https 重定向并直接点击 https 路由即可。 找不到除此之外的任何替代解决方案。