2.服务器端设置页面过期时间。客户端是如何判断什么时候过期并从新取数据
3.服务器(WEB服务器配置缓存策略)
一、服务器如何做到禁用缓存的。
代码实现:
1, 使用java提供的方法,在jsp或者servlet中都可以
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>
2, 使用HTML标记,如下面:
只有在使用安全连接时“Pragma: no-cache”才防止浏览器缓存页面。对于不受安全保护的页面,“Pragma: no-cache”
被视为与“Expires: -1”相同,此时浏览器仍旧缓存页面,但把页面标记为立即过期。
在IE 4或5中,“Cache-Control”META HTTP-EQUIV标记将被忽略,不起作用。
在实际应用中我们可以加上所有这些代码。然而,由于这种方法不能适用于所有的浏览器,所以是不推荐使用的。但
如果是在Intranet环境下,管理员可以控制用户使用哪种浏览器,我想还是有人会使用这种方法。
相关的语言整理如下:
禁止服务器端缓存:
Response.Expires = 0 或
禁用客户端缓存。
HTML网页
ASP网页
<% Response.Expires = -1 Response.ExpiresAbsolute = Now() - 1 Response.cachecontrol = "no-cache" %>
PHP网页
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache");
JSP
response.setHeader("Pragma","No-Cache"); response.setHeader("Cache-Control","No-Cache"); response.setDateHeader("Expires", 0);
C#中禁止cache的方法!
Response.Buffer=true; Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1); Response.Expires=0; Response.CacheControl="no-cache";
二、如何配置IIS或Resin或Apache或nginx的缓存策略
IIS篇:
如果要禁用IIS所有站点静态页面缓存,那么可以:
编辑注册表中的 DisableStaticFileCache值,0为启用,1为禁用 ,该键值的位置位于:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters
如果没有该键值,新建一个dword值的就可以
我按照这样的方法配置了一下不过没有做测试!(如何测试ASP的缓存是否有呢?)
Resin篇
JSP应该会有。研究下看看
摘录的相关资料:
1、服务器缓存可以将动态页面加速到接近静态页面的速度。很多页面通过数据库请求生成,仅在每15分钟左右更新,比如CNN或Slashdot。Resin 可以将结果进行cache,并将它们做为静态页面处理,Resin的缓存对任何Sevrvlet有效,包括jsp和XTP页面,它依赖于http响应头。
默认情况下,页面是不缓存的,要进行cache,页面必须设置http cache头。
Resin的缓存操作类似代理cache,每个用户共享同样的cache页面
不缓存页面:
response.setHeader("Cache-Control", "no-cache, post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");
设定网页生存期:(服务器端设置好缓存过期时间)
<%
long now = System.currentTimeMillis();
response.setDateHeader("Expires", now + 15 * 60000);
%>
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
找了一下相关的资料不多。好像只能是修改RESIN的配置
如果是专业版可以:
不过专业版
License costs $699 per CPU 要钱!!!
Apache的缓存配置:
其实WEB服务器的缓存原理我觉得应该是控制 了HTTP的说明 允许通过配置文件控制HTTP的"Expires"和"Cache-Control"头内容
Apache模块 mod_expires
允许通过配置文件控制HTTP的"Expires"和"Cache-Control"头内容 | |
| 扩展(E) | |
| expires_module | |
| mod_expires.c |
概述
这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期(expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。
这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新。
要修改Cache-Control头中max-age(参见)项之外的内容,你还可以使用指令。
和指令同样能够用易懂的语法格式进行定义:
ExpiresDefault "
ExpiresByType type/encoding "
其中
accessnow(等价于'access')modification
plus关键字是可选的。atoi()接受的],
yearsmonthsweeksdayshoursminutesseconds
例如,下列3个指令都表示文档默认的有效期是一个月:
ExpiresDefault "access plus 1 month"
ExpiresDefault "access plus 4 weeks"
ExpiresDefault "access plus 30 days"
有效期可以通过增加"
ExpiresByType text/html "access plus 1 month 15
days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3
minutes"
注意,如果你使用基于最后修改日期的设置,"Expires:"头将不会被添加到那些并非来自于磁盘文件的内容。这是因为这些内容并不存在"最后修改时间"的属性。
启用或禁用产生"Expires:"和"Cache-Control:"头的功能 | |
ExpiresActive On|Off | |
| server config, virtual host, directory, .htaccess | |
| Indexes | |
| 扩展(E) | |
| mod_expires |
这个指令对其作用范围内的文档启用或禁用产生Expires和Cache-Control头的功能。若设置为 Off 则不会为其作用范围内的任何文档生成Expires和Cache-Control头(除非被更低一层的规则改写,比如.htaccess文件)。若设置为 On 则会按照和指令定义的标准为其作用范围内的文档生成Expires和Cache-Control头。
注意,这个指令并不保证Expires或Cache-Control头一定会产生。如果定义的标准不规范,将不会产生这两个头,其效果是好像从未设置过这个指令一样。
由MIME类型配置的Expires头的值 | |
ExpiresByType MIME-type | |
| server config, virtual host, directory, .htaccess | |
| Indexes | |
| 扩展(E) | |
| mod_expires |
这个指令定义了为指定MIME类型的文档(如text/html)生成的Expires头的值和Cache-Control头的max-age指令。seconds参数设置了添加到基准时间以构造有效期限的秒数。Cache-Control: max-age的计算方法是从有效期减去当前请求时间并转化为秒数。
基准时刻可以是源文件的最后修改时刻或者客户端对源文件的访问时刻,至于使用那一个则由指定。"M"表示源文件的最后修改时刻,"A"表示客户端对源文件的访问时刻。需要注意的是和seconds之间没有空格。
这两种基准的差别是很微妙的。如果使用"M",所有当前缓存中的文档副本都将在同一时刻过期,这个可能对定期更新的URL(比如位于同一位置的每周通告)很有好处。如果使用"A",则每个客户端所得到的有效期是不一样的,这个可能对那些几乎不更新的图片文件很有好处,特别是对于一组都引用了相同图片的相关文档。
示例:
# 启用有效期控制
ExpiresActive On
# GIF有效期为1个月
ExpiresByType image/gif A2592000
# HTML文档的有效期是最后修改时刻后的一星期
ExpiresByType text/html M604800
注意,这个指令只有在"ExpiresActive On"的条件下才有效。它只对指定的MIME类型文档改写由指令设置的有效期。
你也可以使用前面讲述的指定有效期的计算方法。
| 默认有效期的计算方法 | |
ExpiresDefault | |
| server config, virtual host, directory, .htaccess | |
| Indexes | |
| 扩展(E) | |
| mod_expires |
该指令设置了其作用范围内的所有文档的默认有效期的计算方法,它可以被指令基于MIME类型被改写。详情请参见指令和那个的描述。
