换完证书后页面样式缺一半,https 页里的 http 外链要怎么清
换成证书之后页面样式和图片缺一半,https 页面里残留的 http 资源该怎么清理?先分清被拦的和被自动改写的:样式与脚本这类会被浏览器直接拦下,图片与音视频这类会被自动升级成加密地址。规范文档里对这条默认行为写得很明确——浏览器会把 image、video、audio 的混合内容请求从 HTTP 自动升级到 HTTPS,并拦下其他所有资源类型的不安全请求,可拦的清单里包含样式表、脚本、内嵌框架、字体与 CSS 里用到的地址。所以「样式缺一半」这种现场,几乎可以立刻定位到残留引用。
样式缺一半时浏览器做了什么
浏览器没有在渲染时报错,它做的是「拒绝取回」。页面本身正常加载,样式与脚本这些不安全请求被丢弃,于是页面变成裸结构加部分内容。
看起来像证书装坏了,实际是地址没换干净。这类现场有三个识别点:控制台里有混合内容相关提示;被丢弃的请求指向明文地址;只有部分资源缺,而不是整页打不开。
图片类缺失的情况更麻烦一点。它属于「可自动升级」的类型,浏览器会试着改成加密地址去取——如果源站根本没有加密端口,图片就真的取不到。所以「图片也缺」往往意味着那台源站不支持加密访问,不是页面里写错了。
被拦和被自动升级的资源类型差别
两条链路的后果不同,处理方式也不同。
被拦的类型(样式表、脚本、内嵌框架、字体、通过脚本发起的请求)后果是功能与外观直接缺失,页面上会有明显空洞;就算源站支持加密访问,浏览器也不会替你改地址。
被自动升级的类型(图片、音频、视频、CSS 里的背景图与边框图)后果取决于源站是否支持加密访问:支持就正常显示,不支持就是空白。
这个差别决定了清理的优先级:先清被拦的那批,页面外观立刻恢复;再清被升级的那批,把「源站支不支持」作为条件一起核。
有一类例外要单独记:通过图片的多地址属性或响应式图片标签指定的资源,属于可拦的范围,不在自动升级名单里。这类位置最容易漏。
站内清理的三步顺序
第一步是定位残留。范围要覆盖三处:正文数据里写进去的绝对地址、模板与静态资源引用、配置项里的站点地址与外链。只搜模板是最常见的漏法,因为正文里的历史内容才是主要来源。
第二步是批量替换。AnQiCMS 提供全站替换工具,可以批量替换关键词或链接,用它处理正文数据比手工逐篇改更可控。三条纪律:先限定替换范围(只在正文与附件路径这一段),先在一两个栏目试跑,保留替换前的备份以便回退。
能改成站内相对地址的最省事,改不成的统一换成加密地址。配置项里的站点地址要单独核一次,它影响生成的绝对地址、站点地图与推送时的地址形态。
第三步是收口跳转。既然已经上了证书,明文地址应当统一指向加密地址。AnQiCMS 支持 301 跳转管理与重定向设置,把明文入口配到加密目标上,同时把带旧地址的栏目路径一起处理。跳转规则要和替换同时改,只改内容不改跳转,会留下两套地址并存的状态。
改完之后还剩哪些检查
四项按顺序做:
用浏览器打开典型页面(首页、列表、详情、表单页、后台登录),看控制台有没有残留提示;缺样式的地方重点看,那里通常是历史正文。
查引用资源的属性写法,尤其是多地址属性与响应式图片标签,这两个位置不在自动升级范围内。
查第三方嵌入位。内嵌框架和外部脚本的地址由对方给,站内替换工具改不到它;这类地址只能逐个确认对方是否支持加密访问,不支持就考虑去掉。
查站点地图与推送里的地址形态,确保提交的是加密后的最终地址,避免索引里出现新旧两套。
常见问题
加一条响应头把不安全请求全部升级,能不能代替清理? 可以作为过渡。内容安全策略里的升级指令会把所有请求改到加密地址,包括可拦类型,但它改变的是取回方式,不是数据本身;残留地址还在,将来换环境就会再犯。过渡期用它,清理仍然要做。
正文里历史文章的图片地址很长,全都要手改吗? 不用。属于自动升级范围的类型不会造成样式缺失,可以排在后一批;先集中处理样式、脚本、字体这三类。
改了之后索引会不会受影响? 处理得当不会,前提是明文地址通过跳转收敛到加密地址,两套地址不要同时可访问。站内提交给搜索那边的地址形态要一起更新。
怎么避免下次再漏? 把站点地址写成配置项而不是散在各处,模板与正文的引用尽量使用相对地址;新增外链时按是否支持加密访问筛一遍。