Amazon AWS 307 响应和永久重定向到 HTTPS

Posted

技术标签:

【中文标题】Amazon AWS 307 响应和永久重定向到 HTTPS【英文标题】:Amazon AWS 307 response and permanent redirect to HTTPS 【发布时间】:2015-04-19 14:34:54 【问题描述】:

我有一个来自 GoDaddy 的域,使用 AWS Route53 来管理 DNS 记录。 Route53 向负载均衡器发送请求。

对于网络服务器,我有一个负载均衡器,可将请求路由到单个(目前)EC2 实例,EC2 实例中的 nginx 获取请求并向客户端发送响应。

问题是当我使用http:// 执行请求时,AWS 将请求重定向到具有307 Internal Redirect 响应的域的https:// 版本。响应对象也有 Non-Authoritative-Reason: HSTS 标头。

什么问题,哪个组件是重定向请求?

【问题讨论】:

您在 ELB 上配置了哪些监听器? 【参考方案1】:

它既不是组件。

这不是来自 AWS 的任何东西......它是浏览器。这是浏览器生成的内部重定向,与 HSTS 相关...HTTP Strict Transport Security。

如果您现在不这样做,那么大概在过去,您已经在来自该域的响应中生成了 Strict-Transport-Security: 标头,并且浏览器已经记住了这一事实,从而防止您不安全地访问该站点,就像它打算做的那样。

【讨论】:

我什么都不知道!谢谢。 您需要从响应标头中删除 HSTS。就我而言,它是从 nginx add_header (ngx_http_headers_module) 设置的。【参考方案2】:

我知道我迟到了,但我想在 Wordpress 论坛上发布受 this post 启发的实际完整解决方案。

仅从服务器中删除 HSTS 标头并不能解决问题,因为浏览器缓存了 HSTS 响应,并且无论如何都会继续为该网站触发 https://。在 Chrome/Chromium 中,您可以从 about://net-internals/#hsts 中删除该网站,但这对于您的访问者来说几乎不是一个解决方案,因为您不知道有多少人已经将其缓存为 HSTS。

在服务器端,您需要设置max-age=0,它将(根据RFC)要求浏览器停止将该主机视为HSTS。

在 Apache 中,执行以下操作:

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=0"
</IfModule>

并确保您启用了 headers 模块(您可以在 Ubuntu/Debian/Mint 上使用 a2enmod headers)。

【讨论】:

以上是关于Amazon AWS 307 响应和永久重定向到 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

Azure web.config 永久重定向并获得 307 状态码而不是 301

302 和 307 重定向有啥区别?

对动态短网址使用 301/303/307 重定向

301,302,303,307重定向区别

HTTP 的重定向301,302,303,307(转)

连接到 AWS-SDK 时的 Node.js 303 永久重定向