不支持sri的浏览器会忽略integrity属性,资源照常加载且不报错;现代主流浏览器均支持sri并严格校验,哈希不匹配或crossorigin缺失会导致静默失败或校验跳过。

不支持 SRI 的浏览器会忽略 integrity 属性,资源照常加载,不会静默失败。
浏览器遇到不支持的 integrity 会怎么处理
所有现代主流浏览器(Chrome ≥ 45、Firefox ≥ 40、Safari ≥ 11、Edge ≥ 79)都已完整支持 SRI。对于极少数旧版或小众浏览器(如 IE 全系、Opera Mini、部分 WebView 内核),integrity 属性会被直接忽略——既不校验,也不报错,更不会阻断资源加载。
这意味着:你写上 integrity,老浏览器当它不存在;新浏览器则严格校验,不匹配就拒绝执行。
“静默失败”其实是哈希值不匹配时的典型表现
真正导致“页面没反应但控制台没报错”的,往往不是浏览器不支持 SRI,而是哈希值错了,且你漏写了 crossorigin 属性。此时浏览器因 CORS 策略无法读取响应体,也就无法计算哈希,最终直接放弃校验——但这个过程没有错误提示,资源看似加载了,实则被静默丢弃。
-
integrity值与实际资源哈希不一致 → 浏览器报Failed to find a valid digest in the ‘integrity’ attribute - 缺
crossorigin或设为crossorigin="anonymous"但 CDN 返回了Access-Control-Allow-Origin: *以外的响应头 → 校验跳过,无提示 - CDN 缓存了旧资源,你更新了
integrity但没清缓存 → 用户拿到旧文件 + 新哈希 → 校验失败
如何验证当前环境是否真正触发了 SRI 校验
最直接的办法是故意改错一个字符,比如把 sha384- 开头的哈希末尾加个 x,然后刷新页面:
- 如果控制台立刻出现
Failed to find a valid digest...错误,说明 SRI 已生效 - 如果什么都没发生,资源正常执行,说明要么浏览器不支持,要么
crossorigin配置有误,或资源走的是本地非跨域路径(如file://协议) - 注意:
localhost下某些开发服务器(如 Vite 默认)可能默认禁用 CORS,也会绕过校验
关键点在于:SRI 不是“开关式”功能,它的生效依赖 integrity + crossorigin + 跨域资源三者同时满足。少一个,就退化成普通请求——安全没加成,问题还难定位。











