如何告诉浏览器重新验证缓存

时间:2012-03-19 07:41:23

标签: javascript html browser browser-cache

我这里有问题。

我正在使用ETag来验证浏览器缓存。但问题是,当我window.location.pathname时,它往往会从缓存中获取页面。但是当我在页面上执行F5时,它会向服务器发送请求以进行重新验证。

即使我window.location.pathname,我想重新验证缓存。或者有更好的方法。

这是我的请求和响应标头。

Request URL:http://127.0.0.1:5555/monyog-license.html
Request Method:GET
Status Code:200 OK
Request Headers
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:SessionID=fe5b68c5c1f377a063462e59a67efb90; Username=admin; IsAdmin=1; HasServerEdit=1
Host:127.0.0.1:5555
Pragma:no-cache
Referer:http://127.0.0.1:5555/monyog-login.html
User-Agent:Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.630.0 Safari/534.16
Response Headers
Cache-Control:max-age=3600, must-revalidate
Content-Encoding:gzip
Content-Length:1401
Content-type:text/html; charset=utf-8
ETag:1331890257_3961
Expires:Tue, 19 Mar 2013 07:34:04 GMT
Last-Modified:Fri, 16 Mar 2012 09:30:57 GMT

2 个答案:

答案 0 :(得分:1)

这样的事情:window.location.pathname + '?' + (+(new Date))

答案 1 :(得分:1)

你在Apache上运行吗?如果是这样,您可能希望使用.htaccess来控制缓存。以下是一些例子:

# 1 YEAR
<filesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=29030400, public"
</filesMatch>

# 1 WEEK
<filesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=604800, public"
</filesMatch>

# 3 HOUR
<filesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=10800"
</filesMatch>

# NEVER CACHE
<filesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</filesMatch>

您可以通过将任何文件类型添加到该行来设置它们。只需确保每个文件类型由|分隔就像上面的例子一样。

祝你好运!

最佳,

辛西娅