给 CDN 上的脚本补了完整性校验属性之后 功能全废 页面所有交互都没反应 控制台报 Failed to find a valid digest in the integrity attribute for resource with the computed SHA-256 integrity 地址反复核对了也没写错。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,哈希算的是文件字节 只要 CDN 换了压缩方式 改了换行 或者版本变了 内容就跟着变 照抄文档里的旧哈希必然对不上 校验不过整段不执行。
「子资源完整性校验失败」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
curl -s https://cdn.a.com/lib.js -o lib.js openssl dgst -sha384 -binary lib.js | openssl base64 -A
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,下载线上真实返回的那份文件 重新算一次 sha384 别照抄文档;integrity 和 crossorigin 两个属性必须一起写 少一个浏览器就直接忽略校验;CDN 开了压缩的话 确认哈希算的是压缩之后那份文件 否则照样对不上。
最后用这个标准收尾,脚本正常执行 控制台不再提示 digest 校验失败 断网重测一次结果一致。
