缓存通过params破坏
我们希望在生产部署中缓存萧条,但不要浪费一大堆时间来确定系统。 我的想法是用当前版本号将一个参数应用于css和js文件的末尾:
<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/>
两个问题:这会有效地破坏缓存吗? 由于param指出这是动态内容,param是否会导致浏览器永远不会缓存来自该url的响应?
param ?v=1.123
表示一个查询字符串,因此浏览器会认为它是一个新的路径,比如说?v=1.0
。 从而导致它从文件加载,而不是从缓存加载。 如你所愿。
而且,浏览器会假定下次您调用时,源代码将保持不变, ?v=1.123
并且应该使用该字符串进行缓存。 因此,它将保持缓存,但是您的服务器已设置,直到您移动到?v=1.124
左右。
两个问题:这会有效地破坏缓存吗?
是。 即使Stack Overflow也使用这种方法,但我记得他们(每天有数百万的访问者以及不同的客户端和代理版本和配置)已经有一些奇怪的边缘情况,即使这样也不足以打破缓存。 但一般的假设是,这会起作用,并且是一种合适的方法来打破客户端的缓存。
由于param指出这是动态内容,param是否会导致浏览器永远不会缓存来自该url的响应?
不可以。该参数不会更改高速缓存策略; 由服务器发送的缓存头仍然适用,如果它不发送任何,浏览器的默认值。
将版本号放在实际文件名中更安全。 这允许同时存在多个版本,因此您可以推出新版本,并且如果仍存在请求旧版本的任何缓存HTML页面,则它们将获得适用于其HTML的版本。
请注意,在互联网上任何地方最大的版本化部署之一,jQuery在实际文件名中使用版本号,并且它安全地允许多个版本在没有任何特殊的服务器端逻辑的情况下共存(每个版本只是一个不同的文件)。
当你部署新的页面和新的链接文件(这是你想要的)时,这会破坏一次缓存,从那时起,这些版本可以被有效地缓存(你也想要)。
链接地址: http://www.djcxy.com/p/28673.html