混合内容是什么
混合内容是 HTTPS 页面里引用了 HTTP 子资源导致的问题。浏览器按风险把子资源分成两类:脚本、iframe、样式等 active 内容被直接阻断,图片、音视频等 passive 内容可能被自动升级或仅给出警告。修复方向是把资源地址改为 HTTPS,或用内容安全策略让浏览器自动升级请求;被注入的主动内容可以执行任意脚本,因此这属于安全缺陷而不是外观问题。
基本信息
| active 内容 | 脚本、iframe、样式等,默认被直接阻断 |
|---|---|
| passive 内容 | 图片、音视频、字体,可能被自动升级或提示 |
| 修复方式 | 资源地址改 HTTPS,或用 CSP 自动升级 |
| 排查入口 | 浏览器开发者工具的 Console 与 Network 面板 |
典型使用场景
- 站点整体迁移 HTTPS 后,检查内页是否残留 HTTP 引用
- 第三方资源(统计脚本、字体、地图)不支持 HTTPS 时的取舍
- 邮件模板与静态资源清单中的 HTTP 引用排查
- 小程序或 App 内嵌页面的资源协议一致性检查
- 把混合内容纳入上线前的发布检查项
统计页面中的 HTTP 引用
统计页面中的 HTTP 引用
curl -s https://example.com/page.html | grep -c 'http://' # 粗略统计
curl -s https://example.com/ | grep -o 'http://[^" ]*' | sort -u | head
# 逐条定位请用浏览器开发者工具的 Network 面板过滤内容类型与处理
| 类型 | 示例 | 浏览器行为 |
|---|---|---|
| active | 脚本、样式、iframe | 默认阻断,页面功能缺失 |
| passive | 图片、音视频、字体 | 可能升级为 HTTPS 或仅警告 |
| 导航 | 链接与表单提交 | 不算混合内容,但会削弱保护 |
强制升级指令只能升级请求,第三方资源本身不支持 HTTPS 时会直接加载失败;启用前先确认依赖方,或先用只报告的观察模式评估影响面。
修复顺序建议
- 先从访问日志与开发者工具收集实际被阻断的资源清单
- 优先处理自家域名的资源,改协议或改为相对地址
- 对第三方资源要求对方提供 HTTPS 地址或更换供应商
- 最后再打开强制升级与阻断策略,避免一次性引入大量故障
用跳转把 HTTP 资源改成 HTTPS 只能救回部分内容:主动内容在跳转前已被阻断一次,而且跳转本身会先发出一次明文请求,存在性能与隐私损耗。