【问题标题】:http to https - Make browser request corresponding https URLs for http URLs, without needing to edit all pages and manually change all URLs to https?http to https - 让浏览器请求http URL对应的https URL,而不需要编辑所有页面并手动将所有URL更改为https?
【发布时间】:2016-04-26 20:10:50
【问题描述】:

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

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

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

我想知道的是,是否有办法通过 Google 跟踪代码管理器使用 Javascript 来将本地绝对 URL 重写为 HTTPS 而不是 HTTP?

如果可以,是否可以作为永久解决方案?

【问题讨论】:

  • 为什么不在你的文件目录中使用正则表达式的搜索和替换?
  • 许多服务是通过常规 http 或 SSL/https 提供的。您可以通过省略协议部分来克服其中一些问题并编写您的网址,例如://somedomain.com/.../...

标签: javascript https mixed-content


【解决方案1】:

当 JavaScript 被执行时,有问题的资源可能已经被超载了。

您可以通过您的代码简单地 searchhttp:// 的任何实例替换那些 // 或相对 URL。

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

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

【讨论】:

  • 谢谢。这就是我认为的问题所在。
  • 不适合我。
【解决方案2】:

要考虑的一个解决方案是Content Security Policy upgrade-insecure-requests directive

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

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

Content-Security-Policy: upgrade-insecure-requests

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

更多详情,您可以查看Upgrade Insecure Requests 规范。

2018-05-11 更新

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

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

现在使用它的缺点是,目前它只支持 Firefox (since Firefox 42) 和 Chrome。但它也:


PS,我在 W3C 工作,我们在 recently (finally) enabled TLS/https access to all W3C site resources 工作,因为 W3C 有数十万(可能是数百万)页面带有用于嵌入子资源的http URL,我们能够实现它的方式是部分是通过在整个网站上提供 Content-Security-Policy: upgrade-insecure-requests 标头。

文章Supporting HTTPS and HSTS on w3.org 提供了有关部署细节的更多信息。

【讨论】:

  • 问题:1) 我如何将它添加到网站?像这样? <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
  • 2) 如果我错了,请纠正我,但这不适用于所有浏览器?
  • 您不能使用meta 元素或特定文档的 HTML 中的任何其他标记来执行此操作;相反,您需要配置您的 Web 服务器以将其作为 HTTP 标头发送。是的,它还不适用于所有浏览器;到目前为止只有 Chrome 和 Firefox 支持它。
猜你喜欢
  • 1970-01-01
  • 2018-05-05
  • 2013-01-20
  • 1970-01-01
  • 2012-02-28
  • 2017-04-20
  • 2014-08-28
  • 2019-02-27
  • 2017-01-26
相关资源
最近更新 更多