我的情况很奇怪。我在域 example.net 上工作,它的一些页面通过 https 传递,一些通过 http 传递(但也可以使用 https 访问 http 资源)。当我访问页面 http://example.net/page1.html使用 http 协议(protocol)传递 Chrome 执行 HTTP 请求。然后,当我访问 https://example.net/page2.html通过 HTTPS Chrome 执行 HTTPS 请求。到目前为止,一切都应该如此。然后我尝试访问 http://example.net/page1.html通过 HTTP 但 Chrome 执行 HTTPS 请求。
我的第一个想法是 http://example.net/page1.html重定向到 https://example.net/page1.html但这种情况并非如此。以下是我检查过的内容列表:
- 访问时在 Web 开发人员工具的“网络”选项卡中 http://example.net/page1.html (第二次)我看到 http 请求的条目具有“已完成”状态,发起者列中为“其他”,13 个字节,并在 5 毫秒内完成(对主机的其他请求在 150 毫秒以上的范围内)- 显然 Chrome 取消了要求。请求后跟https://example.net/page1.html请求。
- 我已经使用 Wireshark 确认在访问 http://example.net/page1.html 时发送到 example.net 服务器的第一个数据包第二次是到端口 443,因此不是服务器执行重定向以强制 https。
- 切换到“隐私浏览”模式没有帮助,http 请求仍然更改为 https 请求,
- 我没有安装 HTTPS Everywhere 或任何类似的东西,
- 清除浏览器历史记录似乎可以解决问题,但我需要弄清楚为什么 Chrome 和 FF 坚持使用 https,
- 其他网络服务器似乎工作正常,我可以在 http 和 https 之间自由切换,
- IE 不强制使用 https。
是否有一些新的安全策略、服务器 header 等在浏览器发现服务器响应 https 后强制 Chrome 和 FireFox 强制使用 https?我正在使用最新的 Chrome (33.0.1750.154) 和 FF (28.0)。
最佳答案
事实证明,Web 服务器可以在 HTTPS 响应期间设置一个 header ,以告知浏览器对所有请求强制使用 HTTPS。您可以在这里阅读更多相关信息 HTTP Strict Transport Security
关于http - Chrome 或 FireFox 可以强制 https 请求而不是 http 请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22794028/