检查
混合内容扫描
找出 HTTPS 页面里仍然通过 http:// 加载的资源,以及其中哪些会被浏览器拦截。
混合内容扫描检查 HTTPS 页面里还有没有通过 http:// 加载的资源。输入完整的页面网址,点 扫描页面,工具会列出每个不安全的脚本、样式表、图片、iframe 和表单地址,并单独统计会被浏览器拦截的主动内容。
怎么用
- 输入页面网址,比如
https://example.com/blog/。不同模板的页面都要测:首页、文章页、商品页、下单页。 - 点 扫描页面。
- 逐个修改列出的地址,再扫一遍。
主动与被动混合内容
- 主动内容能改变整个页面:脚本、样式表、iframe、字体、
fetch/XHR 请求。浏览器会直接拦截,功能就坏了。 - 被动内容只是显示,不能改页面:图片、音频、视频。新版 Chrome 和 Firefox 会先尝试用 HTTPS 加载,失败就拦截;无论哪种情况,页面都不再算“安全”。
怎么修
- 把模板、主题、数据库里写死的
http://改成https://(自己站内的文件可以用相对地址)。WordPress 之类的站点,换域名或上 HTTPS 后数据库里经常残留旧地址。 - 第三方资源(统计代码、广告、图床、老 CDN)确认支持 HTTPS,不支持就换掉。
- 兜底:返回响应头
Content-Security-Policy: upgrade-insecure-requests。 - 全站干净之后,开启 HSTS,浏览器就再也不会发明文请求。
扫描只读取服务器返回的 HTML,不执行 JavaScript。单页应用还要在浏览器控制台里看混合内容警告。
常见问题
地址栏没有锁,但扫描什么都没发现?
不安全的请求多半是 JavaScript 在页面加载后发出的,或者来自别的页面。打开浏览器开发者工具的控制台,混合内容警告会带上具体网址。
只加 upgrade-insecure-requests 就够了吗?
它让浏览器把 http:// 子资源改用 HTTPS 请求,能很快修好大部分页面,前提是这些资源本身支持 HTTPS。长期还是要把模板和数据库里的地址改掉。
指向其他网站的 http:// 链接算混合内容吗?
不算。用户点击的普通链接(a href)是跳转,不是子资源。但提交到 http:// 的表单会被标出来,因为提交的数据会明文传输。