htaccess – 如何强制客户端的浏览器清除caching?
对于我的网站,我有以下htaccess规则:
# BEGIN Gzip <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript </IfModule> # END Gzip # BEGIN EXPIRES <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 10 days" ExpiresByType text/css "access plus 1 month" ExpiresByType text/plain "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType application/x-javascript "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType application/x-icon "access plus 1 year" </IfModule> # END EXPIRES
我刚刚更新了我的网站,它看起来都很棘手,直到我清除我的caching。 如何强制客户端浏览器在更新后清除caching,以便用户可以看到更改?
你可以强制浏览器caching一些东西,但是
您不能强制浏览器清除caching。
因此,唯一的(AMAIK)方式是为您的资源使用新的URL 。 像版本控制。
正如其他答案所说,更改URL是一种很好的caching清除技术,但是通过更大的站点,更改所有的URL并移动文件是很多工作。
一个类似的技术就是将一个版本参数添加到URLstring中,该string是一个随机的string/数字或者一个版本号,并且只针对被更改的文件。
例如,如果你改变你的网站的CSS,并且看起来好像不太好,直到你进行强制刷新,只需要在文件头部添加?ver=1.1
到CSS导入。 这对浏览器是一个不同的文件,但你只需要改变导入,而不是文件的实际位置或名称。
例如:
<link href="assets/css/style.css" rel="stylesheet" type="text/css" />
变
<link href="assets/css/style.css?ver=1.1" rel="stylesheet" type="text/css" />
也适用于JavaScript文件。
我有你的问题
尽pipe我们可以完全清除客户端浏览器caching,但是您可以将一些代码添加到您的应用程序,以便您的最新更改反映到客户端浏
在你的<head>
:
<meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />
来源: http : //goo.gl/JojsO
您不能强制浏览器清除caching。
您的.html文件在10天后过期似乎会被重新加载。 你需要做的是更新你的.html文件,并将所有的文件移动到一个新的文件夹中,比如version-2/
或者在每个文件中附加一个版本标识符,例如mypicture-2.jpg
。 然后,在.html文件中引用这些新文件,浏览器将再次加载它们,因为位置已更改。
您可以告诉浏览器永远不要通过在代docker中粘贴以下代码来caching您的网站
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />
而为了防止js,csscaching,你可以使用工具来缩小和混淆每次应该产生一个随机文件名的脚本。 这将迫使浏览器从服务器重新加载它们。
希望这有助于
您可以设置“访问加1秒”,这样用户下次进入网站时就会刷新。 保持一个月的设置。
最简单的方法是将文件时间添加到请求中。 例如
myfile.txt的2014-10-30-13:12:33
按date进行版本控制。
更改.CSS文件的名称加载页面,然后以原始名称再次更改文件。
在我的情况下,我改变了很多特定的JS文件,我需要它在所有使用的浏览器中的最后一个版本。
我没有这个文件的特定版本号,所以我只是散列当前的date和时间(小时和分钟) ,并将其作为版本号传递:
<script src="/js/panel/app.js?v={{ substr(md5(date("Ym-d_Hi")),10,18) }}"></script>
我需要它每分钟加载,但你可以决定什么时候应该重新加载。
现在,以下内容不会帮助您处理已经caching的文件,但向前移动,您可以使用以下内容轻松强制请求获取新内容,而不更改实际的文件名。
# Rewrite all requests for JS and CSS files to files of the same name, without # any numbers in them. This lets the JS and CSS be force out of cache easily # by putting a number at the end of the filename # eg a request for static/js/site-52.js will get the file static/js/site.js instead. <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^static/(js|css)/([az]+)-([0-9]+)\.(js|css)$ /site/$1/$2.$4 [R=302,NC,L] </IfModule>
当然,在你的文件夹结构中,做这种types的方法越高,通过一个简单的改变就可以把事情从caching中解放出来。
所以举例来说,如果你把整个css和你的网站的javascript存储在一个主文件夹中
/assets/js /assets/css /assets/...
然后,您可以开始在您的html中将其引用为“assets-XXX”,并使用类似这样的规则将所有资产内容踢出caching。
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^assets-([a-z0-9]+)/(.*) /$2 [R=302,NC,L] </IfModule>
请注意,如果你真的这样做了,那么在你使用它之后,把302改成301,然后caching就会进入。当它是302的时候,它不会在浏览器级别caching,因为这是一个临时的redirect。 如果这样做,那么您可以将所有资产的到期默认时间提高到30天,因为您只需更改login页面中的文件夹名称即可轻松将事情从caching中取出。
<IfModule mod_expires.c> ExpiresActive on ExpiresDefault A2592000 </IfModule>