Mixed Content: The page at ‘https://XXX’ was loaded over a secure connection…
访问 HTTPS 网站,但有时站内下载东西使用的协议却是 HTTP,这其实存在安全隐患,现在 Chrome 不想让这样的事情发生。在谷歌浏览器75的版本还是不会被拦截,但是在测试的87版本谷歌浏览器却被拦截了,相关消息说是85版本之后进行的改造。
ZDNet 报导,谷歌 Chrome 工程师正计划在 HTTPS 网站上默认禁止一些通过 HTTP 下载的行为,当涉及到下载 EXE、DMG(Mac 应用二进制文件)、CRX(Chrome 扩展包) 与诸如 ZIP、GZIP、BZIP、TAR、RAR 和 7Z 等主流压缩/打包文件时,浏览器将阻止下载。
默认阻止下载的这些文件类型被认为是“高风险”的,因为它们最有可能被滥用来隐藏恶意程序。
Emily 表示目前仅考虑阻止在 HTTPS 站点上发起的下载行为,而如果是 HTTP 网站下载这些类型文件,则不加以阻止,因为浏览器本身已经通过 URL 栏对于 HTTP 网站给出了“不安全”的提示。
此外,目前仅考虑将此功能添加到桌面版 Chrome 中,Emily 认为在 Android 上,Chrome 已经可以以类似的方式阻止可疑的 APK 文件,所以暂时问题不大。
解决方法:
1、将资源移到 https 的服务器下
2、设置代理,将http的资源改成https的请求,通过代理实际请求http的返回
3、添加如下页面元信息:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
会将所有的http请求改为https请求,浏览器不会报错,但是前提还得是 https 下有对应资源或者 设置好代理了,否则请求资源将会加载失败
4、也可以换成打开新窗口 window.open() 来请求资源路径来下载资源,不过第一次请求需设置浏览器允许当前页面打开 http 路径的新窗口