我想在我的应用程序中为静态资产(例如样式表和 JavaScript 文件)实现子资源完整性和缓存破坏。目前我使用 PHP 和 Twig 模板。
我知道有很多工具可以为所有 JS 和 CSS 文件生成哈希,但我正在寻找如何将哈希实现到数百个文件的<script>
and标记中。<link>
这篇博客文章描述了我正在尝试做的大部分事情,但是作者只介绍了缓存破坏,并在文件名中使用了一个静态时间戳,他每次都手动更改。使用构建工具以编程方式生成该时间戳也不难,但使用 SRI,该值是一个哈希值,每个文件都不同。
例如,一个片段header.html.twig
:
<!-- cdn requests -->
<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'
integrity='sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx'
crossorigin='anonymous'></script>
<!-- same-origin requests -->
<script src='foo.1a516fba.min.js'
integrity='sha384-GlFvui4Sp4wfY6+P13kcTmnzUjsV78g61ejffDbQ1QMyqL3lVzFZhGqawasU4Vg+'></script>
<script src='bar.faf315f3.min.js'
integrity='sha384-+vMV8w6Qc43sECfhc+5+vUA7Sg4NtwVr1J8+LNNROMdHS5tXrqGWSSebmORC6O86'></script>
每次都更改src
/href
和属性不是明智的做法。integrity
我可以编写一个 Twig 函数,它每次都调用一个 PHP 函数来对文件进行哈希处理,它可能在 dev 上运行良好,但这似乎在计算上非常昂贵。
什么是可行的方法?