浏览器继续呈现其缓存版本。我想总是强迫GET

时间:2012-02-17 16:39:34

标签: html caching browser

如何阻止客户端浏览器呈现页面的缓存版本,以便访问者访问页面时必须始终执行GET?

我在视图中使用Django的@never_cache装饰器,它将“Cache-Control:max-age = 0”添加到HTTP GET标头。但是,当我访问该页面时(在谷歌浏览器和Firefox中,我到目前为止测试的唯一浏览器),缓存版本不可避免地呈现。 (通过访问网络选项卡确认请求,报告“ 200 OK(来自缓存)”。)

如果我现在点击“刷新”按钮,它将从服务器呈现新鲜内容(请求的“网络”标签显示“ 200 OK ”并且标题如图所示下文)。

我还尝试将“Expires”HTTP标头参数设置为过去的日期,而不是设置“Cache-Control:max-age = 0”。这也不起作用。

Request Method:GET
Status Code:200 OK

Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
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
If-Modified-Since:Fri, 17 Feb 2012 15:25:21 GMT
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11

Response Headers
Cache-Control:max-age=0
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Fri, 17 Feb 2012 15:55:11 GMT
ETag:"[removed]"
Expires:Fri, 17 Feb 2012 15:55:11 GMT
Last-Modified:Fri, 17 Feb 2012 15:55:11 GMT
Server:nginx
Transfer-Encodindg:chunked
Vary:Cookie,Accept-Encoding
X-Handled-By:127.0.0.1:8000

2 个答案:

答案 0 :(得分:11)

在您的回复中设置:

response['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate' 
response['Expires'] = 'Fri, 01 Jan 2010 00:00:00 GMT'

Google Docs始终强制执行页面刷新。

然后你可以玩它来找到适合你的理想行为。

答案 1 :(得分:1)

您是否在htaccess文件中尝试过此操作:

<FilesMatch "\.(css|gif|html|jpg|js|php|png)$">
Header set Cache-Control: "max-age=0, no-store"
</FilesMatch>

您可以调整特定页面/路径的文件匹配行以及特定资产