火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

link 加 integrity 后资源被丢弃怎么办

发布于 17小时前
2

给 link 加上 integrity 之后样式不再加载,控制台只提示校验失败。这不是浏览器报错,而是 SRI 机制在按预期工作:校验不通过时资源被直接丢弃,不会降级加载。要让校验链成立,三个条件必须同时满足。

显示网络技术内容的电脑屏幕,用于说明外部静态资源的加载校验
校验链断在任何一环,资源都会被丢弃

三个必要条件

  1. link 带 integrity 属性,值为 算法-哈希 形式,例如 sha384-;
  2. 同一标签显式声明 crossorigin="anonymous",缺了这条浏览器不做 CORS 校验,直接判定失败;
  3. 服务端对该资源返回 Access-Control-Allow-Origin 响应头。
<link rel="stylesheet" href="https://cdn.example.com/app.css"
      integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
      crossorigin="anonymous">

哈希怎么生成

openssl dgst -sha384 -binary app.css | openssl base64 -A

哈希针对文件的字节内容生成,构建产物每次变更都要重新计算并同步到模板。人工拷贝容易出错,交给构建流程生成更可靠。

应急处理顺序

  1. 先移除 integrity 属性恢复访问,业务优先;
  2. 核对 crossorigin 是否遗漏,这是最常见的一条;
  3. 用 curl -I 检查响应头里的 Access-Control-Allow-Origin;
  4. 重新生成哈希并回填,确认文件内容与线上一致;
  5. 全部通过后把 integrity 加回并观察一个发布周期。

两类不适用

  • 内容会变的资源。CDN 侧的压缩、合并、注入改写都会让字节变化,哈希随之失效;
  • 同源且由自身管道发布的资源。收益有限,还会增加每次发布的维护负担。

SRI 的价值集中在第三方 CDN 与公共库,这类资源不常变且需要防篡改。

常见问题(FAQ)

integrity 校验失败时浏览器会加载资源吗?
不会。校验不通过的资源被直接丢弃,样式或脚本不会执行,这是子资源完整性的设计行为,不是浏览器的容错。
为什么加了 integrity 就报 CORS 错误?
缺少 crossorigin="anonymous"。加上之后浏览器才会按 CORS 流程校验,服务端也需要返回允许的来源头。
哈希值用 MD5 可以吗?
规范要求使用 SHA-256、SHA-384 或 SHA-512 一类的安全哈希算法,MD5 不被接受,浏览器会判定算法不支持。
CDN 没改动文件,哈希为什么变了?
CDN 的压缩、合并、自动注入都会改变实际下发的字节。生成哈希应以线上实际拿到的内容为准,或对这类处理关闭后再算。
同源资源要不要加 integrity?
收益有限。资源由自身发布管道控制,且每次构建都要重算哈希,维护成本高于收益。第三方资源才是主要适用场景。
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026