HTTPS页面中HTTP资源被浏览器静默拦截,主动混合内容(如script、iframe、fetch)根本不会发出请求,被动混合内容(如img)也已被全面屏蔽,必须彻底消除所有http://字符串。

HTTPS 页面里加载 HTTP 资源,浏览器会直接阻止——不是警告,是静默拦截。不存在“兼容”或“容忍”混合内容的余地,必须全部消除。
为什么 Chrome 控制台只报 Mixed Content 却看不到请求
因为浏览器根本没发出去。主动混合内容(如 <script src="http://...">、<iframe src="http://...">、fetch("http://..."))在发起前就被内核拦截,Network 面板里连条目都不会出现;只有被动混合内容(如 <img src="http://...">)可能留下 blocked:mixed-content 状态,但新版 Chrome 已一并屏蔽。
- 别指望清缓存或硬刷新能绕过,这是协议层强制策略
- 错误信息里带完整 URL(如
Mixed Content: ... requested an insecure script 'http://cdn.example.com/app.js'),直接复制就能定位源头 - 第三方 SDK(如老版百度统计)常在 JS 里硬写
document.write('<script src=\"http://...\">'),这种不会出现在 HTML 源码里,得查 JS 文件
修复时 protocol-relative URL(//)为什么经常失效
//cdn.example.com/js.js 看似省事,但现代环境已不适用:CDN 大多停用 HTTP 端口(访问直接 404),Webpack/Vite 默认不生成这种路径,且 fetch() 或 new Image().src 中写 // 会被解析为相对路径而非协议继承。
- 本地开发用
file://协议打开 HTML 时,//会变成file://cdn.example.com/...,必然失败 - 带 query 参数的 URL(如
//oss.example.com/a.jpg?x-oss-process=image/resize,p_50)在部分 CDN 上无法匹配 HTTPS 回源规则 - 真正可靠的写法是显式写死
https://,前提是确认目标域名证书有效、支持 TLS 1.2+
哪些地方容易漏掉 HTTP 地址
除了显眼的 <img src="http://...">,这些“看不见”的位置更常触发混合内容:
立即学习“前端免费学习笔记(深入)”;
- CSS 里的
background: url(http://...)、@font-face { src: url(http://...) }、@import "http://..." - HTML 的
<meta property="og:image" content="http://...">、<link rel="icon" href="http://..."> - SVG 内联时的
xlink:href="http://..."(SVG2 已废弃,需删xlink:前缀改用href) - JS 动态拼接:
const url = 'http://' + domain + '/api';或el.src = 'http://xxx.com/' + id; - 后端模板(如 PHP 的
get_template_directory_uri())返回的 URL 若硬编码了http://,需改用协议感知函数
CSP upgrade-insecure-requests 响应头到底管不管用
它只对新式浏览器(Chrome 43+、Firefox 42+)生效,且仅作用于静态资源加载阶段;对 JS 运行时动态构造的 http:// 字符串(如 fetch(url))完全无效,<script src="http://..."> 仍会被拦截。
- Nginx 配置示例:
add_header Content-Security-Policy "upgrade-insecure-requests"; - 等效
<meta>标签:<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">,但只影响当前页,iframe 子页面不继承 - 它不能替代代码修复,只能作为兜底手段——比如临时覆盖 CMS 插件生成的旧链接,但上线前必须清理干净
最易被忽略的是:某些 CDN 或图床把 HTTP 入口 301 跳转到 HTTPS,看似“自动升级”,但浏览器在跳转前已判定为混合内容并拦截,根本不会发出初始请求。修复必须从源头杜绝 http:// 字符串出现,而不是依赖中间环节的重定向或升级机制。



















