2

我有兴趣将我的整个网站从 http 切换到 https。

我担心的是我有一些使用绝对 http URL 的内容。

我需要编辑每个页面以将这些 URL 更改为相对,但这可能需要我一段时间才能完成。

我想知道的是,是否有办法通过谷歌标签管理器使用 Javascript 来将本地绝对 URL 重写为 HTTPS 而不是 HTTP?

如果这是可能的,它可以用作永久解决方案吗?

4

2 回答 2

5

要考虑的一种解决方案是内容安全策略upgrade-insecure-requests指令

upgrade-insecure-requests指令指示用户代理将站点的所有不安全 URL(通过 HTTP 提供的)视为已替换为安全 URL(通过 HTTPS 提供的)。该指令适用于具有大量需要重写的不安全旧 URL 的网站。

这相当于配置您的 Web 服务器,以便您网站上的所有页面都使用此标头提供服务:

Content-Security-Policy: upgrade-insecure-requests

因此,添加该标头的效果是:对于您网站上使用httpsURL 提供的任何页面,任何时候浏览器在其中一个页面中看到http嵌入(子)资源的 URL——无论它是样式表的 URL,脚本、图像、视频或其他任何东西——浏览器将自动(透明地)尝试从相应的httpsURL 获取资源。

有关更多详细信息,您可以查看升级不安全请求规范。

2018-05-11 更新

upgrade-insecure-requests现在所有主要浏览器引擎(包括 Edge 17+ 和 Safari 10.3+)都支持该指令:

https://caniuse.com/#feat=upgradeinsecurerequests

现在使用它的缺点是,到目前为止,它仅在 Firefox(自 Firefox 42 起)和 Chrome 中受支持。但它也:


PS,我在 W3C 工作,我们最近(最终)启用了对所有 W3C 站点资源的 TLS/https 访问——由于 W3C 有数十万(可能是数百万)带有http嵌入式子资源 URL 的页面,因此我们能够实现这一目标的部分原因是在Content-Security-Policy: upgrade-insecure-requests整个网站上提供标题。

w3.org 上的支持 HTTPS 和 HSTS 文章提供了有关部署细节的更多信息。

于 2016-01-21T03:28:22.237 回答
1

当 JavaScript 被执行时,有问题的资源可能已经被加载甚至加载。

您可以简单地在代码中搜索任何实例http://并将其替换为//或相对 URL。

如果您的内容更复杂(例如,分布在多台机器上),您可以使用镜像脚本(如wget --mirror http://example.net/)下载整个页面的静态版本,然后搜索.

然后,设置 HTTPS(首先只为您,然后为所有测试人员)并检查一切是否正常。一旦确定是这种情况,就让每个人都通过 HTTPS。最后,稍后,考虑将 HTTP 重定向到 HTTPS 并实现安全 cookieHSTSHPKP

于 2016-01-20T20:09:45.283 回答