我有兴趣将我的整个网站从 http 切换到 https。
我担心的是我有一些使用绝对 http URL 的内容。
我需要编辑每个页面以将这些 URL 更改为相对,但这可能需要我一段时间才能完成。
我想知道的是,是否有办法通过谷歌标签管理器使用 Javascript 来将本地绝对 URL 重写为 HTTPS 而不是 HTTP?
如果这是可能的,它可以用作永久解决方案吗?
我有兴趣将我的整个网站从 http 切换到 https。
我担心的是我有一些使用绝对 http URL 的内容。
我需要编辑每个页面以将这些 URL 更改为相对,但这可能需要我一段时间才能完成。
我想知道的是,是否有办法通过谷歌标签管理器使用 Javascript 来将本地绝对 URL 重写为 HTTPS 而不是 HTTP?
如果这是可能的,它可以用作永久解决方案吗?
要考虑的一种解决方案是内容安全策略upgrade-insecure-requests
指令。
该
upgrade-insecure-requests
指令指示用户代理将站点的所有不安全 URL(通过 HTTP 提供的)视为已替换为安全 URL(通过 HTTPS 提供的)。该指令适用于具有大量需要重写的不安全旧 URL 的网站。
这相当于配置您的 Web 服务器,以便您网站上的所有页面都使用此标头提供服务:
Content-Security-Policy: upgrade-insecure-requests
因此,添加该标头的效果是:对于您网站上使用https
URL 提供的任何页面,任何时候浏览器在其中一个页面中看到http
嵌入(子)资源的 URL——无论它是样式表的 URL,脚本、图像、视频或其他任何东西——浏览器将自动(透明地)尝试从相应的https
URL 获取资源。
有关更多详细信息,您可以查看升级不安全请求规范。
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 文章提供了有关部署细节的更多信息。
当 JavaScript 被执行时,有问题的资源可能已经被加载甚至加载。
您可以简单地在代码中搜索任何实例http://
并将其替换为//
或相对 URL。
如果您的内容更复杂(例如,分布在多台机器上),您可以使用镜像脚本(如wget --mirror http://example.net/
)下载整个页面的静态版本,然后搜索.
然后,设置 HTTPS(首先只为您,然后为所有测试人员)并检查一切是否正常。一旦确定是这种情况,就让每个人都通过 HTTPS。最后,稍后,考虑将 HTTP 重定向到 HTTPS 并实现安全 cookie、HSTS和HPKP。