我有一个PWA,它是在ASP.net核心中开发的,并且托管在(Linux)上。
当PWA的新版本发布时,我发现设备在不清除浏览器缓存的情况下无法更新。
为了解决这个问题,我发现了一个名为asp-append-version的标记助手,它将清除特定文件的缓存。我还发现,我可以附加src属性的版本,该属性指定文件的URL,以触发浏览器检索最新文件。例如,src="/scripts/pwa.js?v=1".每次更新pwa.js文件时,我也会更改版本,即v=2。
我现在发现,我的PWA正在我的应用程序中缓存其他JavaScript文件,这导致应用程序无法在更新到新版本的设备上工作,但是未能清除特定文件上的缓存。
我认为,如果我没有指定任何缓存控制头,如Cache-Control,浏览器将不会缓存任何文件,但是,情况似乎并非如此。
要解决这个问题,推荐的方法是添加适当的缓存控制头(缓存-控制、普拉格玛和过期)以防止浏览器缓存,还是应该仅将标记助手asp-append-version添加到例如脚本标记以自动清除该特定文件的缓存?
例如,我希望浏览器能够存储图像,而不是每次都去服务器检索这些图像。我相信设置头部缓存-控制:无缓存将工作,因为这将检查文件是否已更改,然后再检索更新的版本?
谢谢。
发布于 2021-11-18 12:35:06
谢谢@ SteveSandersonMS为您的见解,在您的web服务器返回正确的HTTP缓存控制头,浏览器将知道不重复使用缓存的资源。
请参阅此处链接1 & 链接2以获取Linux app service上的缓存控制头
例如,如果您使用Blazor WebAssembly模板的“WebAssembly核心托管”版本,服务器将返回Cache-Control: no-cache标头,这意味着浏览器将始终与服务器检查是否存在更新的内容(这使用etags,因此服务器将返回304,意思是“继续使用缓存的内容”,如果自浏览器上次更新其内容以来没有发生任何变化)。
如果使用不同的web服务器或服务,则需要配置web服务器以返回正确的缓存头。WebAssembly无法控制甚至影响到这一点。
参考这里
https://stackoverflow.com/questions/70003736
复制相似问题