如果我想将bug修复程序部署到现有的JS文件中,如何确保旧文件不会缓存在客户端的计算机上?
答案 0 :(得分:5)
通常,您的静态资源应该通过/static.js?ver=123
等网址进行版本控制并提供服务。所以你需要的是增加版本号。以这个相同的网站为例,查看来源,您会在<head>
部分注意到以下内容:
<script type="text/javascript" src="http://sstatic.net/js/master.min.js?v=689f646cde8d"></script>
答案 1 :(得分:4)
如果一切都符合规格,您不需要做任何特殊的事情。 HTTP已经有了解决这个问题的机制。浏览器应发送If-Modified-Since标头,其中包含检索日期或If-None-Match标头以及缓存副本的ETag。服务器将检查服务器上文件的修改时间(或ETag,其中应包括计算中的修改时间),如果mod时间小于浏览器给出的时间,或者ETag匹配,则返回304 Not Modified响应。浏览器只有在收到304响应时才应使用其缓存副本。
这里的一个问题是缓存代理,它们忽略任何服务器提供的Expires标头,或者假设它未来没有给出,在这种情况下你可以发送Cache-Control标头"must-revalidate" 3}}指令。
当然,浏览器或代理可能不合规,在这种情况下,其他答案会向您展示如何强制浏览器重新获取资源。
答案 2 :(得分:1)
如果您使用的是php
<link rel="stylesheet"
href="<?php echo './general.css?' . filemtime('./general.css'); ?>"
type="text/css" media="screen, projection" />
永远忘记问题,它会添加吗?然后自动进行文件修改时间,每次更改文件时都会有所不同。
与其他语言应该相似。
答案 3 :(得分:0)
更改包含JS的HTML文档中的URL。
将一个数字(例如版本,源代码管理修订版,时间戳)附加到查询字符串是一种常见的技术。
例如:src="/js/myjs.js?7"