integrity属性仅对
但是,必须理解浏览器的工作逻辑:它会严格按照从左到右的顺序尝试匹配。只要第一个哈希值校验通过了,它就会立刻停止,不会再去检查后面的值。所以,你需要把最有可能、或最希望使用的那个算法哈希值放在最前面。
这里有个棘手的情况:假如用户浏览器里还缓存着旧版本的资源文件,而你的 HTML 中只更新了排在后面的那个哈希值,校验仍然会失败,因为浏览器只认第一个(并且它不匹配)。
话说回来,在真实的日常开发中,真正需要同时提供多个哈希的场景其实少之又少。除非你正在进行复杂的灰度发布,需要同时支持不同构建产物的算法,否则,固定使用一种算法,并在每次构建时重新计算并注入对应的哈希值,是更稳妥、更少犯错的做法。
这引出了更复杂的一点:哈希值本身其实是你构建产物的一部分。它必须被整合到 CI/CD(持续集成/持续部署)流程中,实现自动生成并注入到最终的 HTML 里。如果靠手动硬编码,哈希值几乎必然会“过期”。一个特别容易被忽略的细节是:在本地开发时,开发服务器(dev server)通常不会提供完整的、用于生产环境的哈希值。这就导致测试环境一切正常,但代码一上线,资源校验却突然失效的尴尬局面。
