HTTP协议 缓存控制

1.对浏览器缓存的理解

缓存就是我之前访问过这个页面或者数据了,然后 再次访问 的时候,如果已经在浏览器本地有缓存了,就直接用这个就好了,这样会加快访问速度。但是这样有可能导致你拿不到 最新 的数据。
不管在什么时候, 刷新 操作总会使你得到最新的数据,因为刷新会重新访问服务器,不管有没有缓存。
由于不同种类的浏览器对于缓存处理的机制可能有所不同,加上不同用户浏览器缓存的设置也不同,所以可以通过在服务器端控制响应标头来实现缓存管理。

2.三个有关的响应头

1. Progma

设置为“no-cache”时,表示当前页面不缓存。

Pragma 是一个在 HTTP/1.0中规定的通用首部,这个首部的效果依赖于不同的实现,所以在“请求-响应”链中可能会有不同的效果。它用来向后兼容只支持 HTTP/1.0协议的缓存服务器,那时候 HTTP/1.1 协议中的 Cache-Control 还没有出来。
注意: 由于 Pragma 在HTTP 响应中的行为没有确切规范,所以不能可靠替代 HTTP/1.1 中通用首部 Cache-Control,尽管在请求中,假如Cache-Control 不存在的话,它的行为与 Cache-Control: no-cache 一致。建议只在需要兼容 HTTP/1.0 客户端的场合下应用 Pragma 首部。

2. Cache-Control

设置为“no-cache”时,表示当前页面不缓存。
在开发中,若表示不缓存,则上述两个头都要写。以保证兼容性,兼容HTTP1.0和HTTP1.1。

3. Expires

该响应头的设置值为需要缓存到的时间,设置该响应头后,表示当前页面在访问后,会在浏览器本地缓存,缓存的有效时间为设置的时间值。如果是-1,则表示不缓存。
一种情形: 如果我浏览器已经有缓存了,然后我现在再在服务器这边设置“no-cache”是不行的,浏览器还是访问的缓存页面。原因也很简单,因为我只是控制了当前页面不缓存,而不代表我之前的缓存不能用了。
因此,还需要设置一句“Expires: -1”,更新一下浏览器的缓存。这样原缓存就会失效了。

3. 举例

在servlet中,利用response对象的setHeader(String arg0,String arg1)setDateHeader(String arg0,long arg1)方法来控制响应头。当设置值为时间的时候,需要用到后者。
比如:response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -1);
response.setDateHeader("Expires", System.currentTimeMillis()+1000l*60*60);//控制当前缓存一个小时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值