我们的首席Web开发人员说:
“JavaScript代码现在在我们的新代码中进行了版本控制,并且应该在新版本发布时自动刷新。然而,我们仍然发现它并不总是有效的。你可以随时向谷歌和微软提出这个问题。
所以我来问你。2023年,这还是“一件事”吗?有哪些选项是他可能不知道的?
我没有资格回答这个问题,所以这就是为什么我问比我自己更聪明的人。
我在Stackoverflow上搜索了答案,然后发给了他。他的回答是在上面的报价。
我们的首席Web开发人员说:
“JavaScript代码现在在我们的新代码中进行了版本控制,并且应该在新版本发布时自动刷新。然而,我们仍然发现它并不总是有效的。你可以随时向谷歌和微软提出这个问题。
所以我来问你。2023年,这还是“一件事”吗?有哪些选项是他可能不知道的?
我没有资格回答这个问题,所以这就是为什么我问比我自己更聪明的人。
我在Stackoverflow上搜索了答案,然后发给了他。他的回答是在上面的报价。
1条答案
按热度按时间ujv3wf0j1#
页面的任何类型的额外内容的基于URL的版本控制方式,通过浏览器隐式发出的简单GET请求获取的内容,是这样的:
1.构建系统(无论是什么)使用某种技术将特定的数字与完整的构建相关联,并使该数字可用于构建主页。在过去,我使用时间戳(方便开发)和源代码库头修订号或发布ID或任何东西。
1.主页面的组装(其中脚本等被导入)使用
<script>
标记,URL通过URL中的虚拟参数请求相同的版本ID:字符串
dummy参数使该URL在浏览器看来像一个全新的URL,该高速缓存无法识别。这意味着“这是该高速缓存中吗?”“测试将失败,浏览器将获取最新部署的文件。
请注意,特殊的构建或时间戳ID值除了破坏浏览器缓存之外不会做任何事情。
CSS、图像等也是如此。
一种较弱的方法是在客户端上计算一个nonce值。如果你可以做一个相当大的随机数,并将其用作哑参数,这将 * 通常 * 工作,但我个人不希望这种错误。
还有一件事如果您系统不涉及可能超时的会话(如不安全的内容网站),则这种缓存避免将不起作用,因为浏览器将继续假设主页已缓存,且它不会更新脚本URL。在这种情况下,您可以为每个资源使用“Etag”,或设置“Expires”头,或使用“Last-Modified”和“If-Modified-“Since”来进行基于时间的缓存过期检查。