【发布时间】:2017-06-17 14:15:45
【问题描述】:
我正在使用 webpack 来打包我的所有文件。在 webpack 中,我使用 chunkhash、Md5Hash 和 manifest 来为每个通过浏览器下载的文件生成唯一的 chunkhash。它看起来像这样。
styles.3840duiel348fdjh385idfki.css
bundle.488503289dfksdlkor93lfui.js
vendor.sdkkfuuewkf892377rfkjdle.js
image.dkkdiiue9984ujjkfld003kfpp.png
这意味着浏览器可以缓存它们,如果哈希没有更改,它将使用缓存的版本。同时我可以例如只更改样式,只有哈希会被更改,所以当我部署应用程序浏览器时仅下载新样式。
问题是在我的服务器上我使用这个:
Cache-Control: public max-age=31536000
这表示积极缓存,浏览器将使用缓存版本一年,除非 URL、文件名发生更改。例如,当我更改样式时,我的哈希值已更改,浏览器应从服务器请求新样式。那是根据这篇文章(模式 1)和我发现的其他一些文章 https://jakearchibald.com/2016/caching-best-practices/
我的问题是,当我更新某些东西时,例如样式,样式的哈希值会发生变化,我会部署它。除非我在页面上点击 reload,否则浏览器不会请求新样式。它将为缓存的文件提供服务。我该如何解决这个问题?
我可以使用Cache-Control: no-cache,但这不是一个解决方案,因为浏览器每次都必须检查服务器是否可以使用缓存版本。也就是说,每次有人访问该页面时都不需要 4 个 http 请求。
【问题讨论】:
-
伊戈尔,我也面临同样的问题。谁有解决方案,请在这里发布吗?
-
嗨,阿比。请参阅下面的解决方案。
标签: caching hash webpack cache-control