【发布时间】:2018-09-03 01:45:46
【问题描述】:
我有一个托管为https://foo.bar.com 的公司网站。
但是,很多用户错误地认为 URL 是 www.foo.bar.com。在此问题得到纠正之前,我们将通过设置代理站点 www.foo.bar.com 来实施临时解决方案,该站点会将任何访问该站点的用户重定向到 https://foo.bar.com。
这可行...但仅在用户第一次导航到该页面时。下次我尝试访问 www.foo.bar.com 时,由于缓存,浏览器会将我带到https://www.foo.bar.com。我们没有为 https://www.foo.bar.com 设置证书,因此出现 NET::ERR_CERT_COMMON_NAME_INVALID 错误。
有没有办法在不需要证书的情况下解决这个问题?
为了进行测试,我什至尝试在导航到 www.foo.bar.com 时返回一个网页,其中包含导航到 https://foo.bar.com 的链接。但是,即使在这种情况下也会发生同样的问题。我猜 HSTS 在这里发挥作用,但不知道如何去做。
感谢您对此事的任何见解,在此先感谢您。
【问题讨论】:
-
你不能只从let's encrypt 获得 www.foo.bar.com 的证书吗?您如何进行正在缓存的初始重定向?
-
@kicken 如果必须使用证书完成,那么我们知道前进的方向。为了解决审批流程,我们正在尝试查看是否有一种无需依赖证书即可继续进行的方法。当我导航到 www.foo.bar.com 时,我尝试使用 window.location.replace 和 window.location.href 进行重定向。
-
有效的证书是修复 NET::ERR_CERT_COMMON_NAME_INVALID 的唯一方法。
-
@kicken 我明白这一点,但我不确定为什么它只会在第二次以后发生。我第一次访问 www.foo.bar.com 时,它会按预期将我重定向到 https:// foo.bar.com,而没有任何证书问题。我猜这是因为 HSTS,重定向完成后,它会缓存“https://www.foo.bar.com”而不是“http://www.foo.bar.com”。我猜在客户端和服务器之间的初始通信之后,浏览器看到 Strict-Policy-Security 标头并且知道它必须使用“https”而不是“http”保存 URL。如果有办法覆盖这种行为,那就是我所追求的
-
第一次尝试后,即使我尝试手动导航到“http://www.foo.bar.com”,浏览器也会将“http”更改为“https”。
标签: http https cache-control http-redirect