解决HTTP数据不更新问题——no-cache在HTTP通信协议中的应用

所属分类: 软件教程 / 经验技巧 阅读数: 1863
收藏 0 赞 0 分享
转贴请注明出处:http://blog.csdn.net/froole
HTTP服务器向客户端返回的头信息中可以包含Cache-Control:no-cache信息,意为“数据内容不被储存”。
很多WEB程序设计中,通常并不需要考虑这一点。但是,对相同URL的请求,并需要动态数据时,就需要程序员对服务器返回头信息的进行修改。
例如,通过Ajax向同一个URL发送请求、页面访问同一个URL并需要动态显示页面内容。
在不对服务器所返回头信息做任何修饰的情况下,Cache-Control可能不被添加,此时,浏览器将缓存从服务器取得的信息。如果再次访问网页,浏览器会直接读取缓存数据,而非访问HTTP服务器,如果通过代理再次访问网页,那么,代理服务器将会直接向浏览器返回一个302状态,命令浏览器从缓存读取数据。
本文想定开发人员遭遇以下两种情况:
1.Ajax中,需要通过一个URL适时提取动态数据(例如,使用DWR提取某个POJO的数据);
2.在一个网页中,通过对某个连接的重复访问(发送请求),动态读取不同的页面数据(例如,根据某个项目的列排序)。
如果可以在设计阶段,就已经考虑到通过URL参数,改变URL,倒也不需要考虑缓存的问题。但是,如果URL相同,就会出现相应数据更新迟缓的现象。例如,如果访问速度相对较快,第一次访问和第二次访问的数据,在同一个客户端是相同的。也就是HTTP数据不更新/更新迟缓现象。
解决此问题的方法,就是向服务器的返回头信息“Cache-Control:no-cache”。
PHP的情况,可以向相应的返回处理中添加以下代码:
header("Cache-Control: no-cache");
header("Cache-Control: no-cache");
Java的情况,可以定义相应的URL,通过操作HttpServletResponse定义头信息,如下:

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Cache-Control", "no-cache");
chain.doFilter(request, response);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Cache-Control", "no-cache");
chain.doFilter(request, response);
}
以上两个例子,虽然是在不同语言下的实现,但是从HTTP协议通信的角度,其效果是类似的。
使用Cache-Control需要注意的
通过控制Cache-Control头信息,可以让浏览器(代理服务器)及时更新请求数据。但是要注意的是,只有在HTTP1.1下才Cache-Control被支持。
当然,HTTP的版本在大多数WEB开发中,同样不需要考虑。而目前的主流浏览器也都是默认支持HTTP1.1。但是,如果使用IE6,并且通过代理服务器访问网站的时候,浏览器的HTTP请求就要变成HTTP1.0了。这个时候,Cache-Control就会失效,而且无法从服务器端控制HTTP协议版本。只能通过浏览器的设定来解决,方法是,通过IE详细设置中的HTTP1.1设定来解决。如果可能,也可以把目标服务器排除在代理目标之外。
更多精彩内容其他人还在看

搜狗输入法皮肤更换技巧(让肤色随心情而换)

3.7女生节了,为了更好的心情,我们会为搜狗更换皮肤。搜狗输入法为我们提供了多种女生节的皮肤,下面是更换的方法,喜欢个性的朋友可以看看哦
收藏 0 赞 0 分享

百度快照不显​示时间怎么办 百度快照不显示时间的原因及解决方法

百度快照将不再显示时间,小伙伴们是不是觉得也修改有点很不适应呢?我们在找资源的时候总是希望可以看见最新的,假如没有时间,我们该如何区分呢
收藏 0 赞 0 分享

农业银行网上银行怎么更换手机号 农业银行网上银行更换预留手机号码图文步骤

当我们换了新的手机号码之后,不想去银行柜台修改,就可以通过电脑在农业银行网上银行修改预定的手机号,下面就和小编一起去看下具体的修改步骤吧
收藏 0 赞 0 分享

百度众测怎么使用优惠券并兑换礼品?

百度众测怎么使用优惠券并兑换礼品?百度众测有时做任务时会获得优惠券,优惠券可以在兑换礼品时抵销一定的兑换礼券。如果优惠券不使用的话就会过期,那么如何使用百度众测里的优惠券呢?接下来就来介绍一下步骤
收藏 0 赞 0 分享

百度知道财富值兑换礼物后怎么查询是否发货?

百度知道财富值兑换礼物后怎么查询是否发货?春节前,在百度知道用财富值兑换了一个wifi,春节后还是没收到,到底是否已发货,快递动态,想必是我最着急的,但去问谁呢?下面分享解决办法
收藏 0 赞 0 分享

怎么把百度账户与微信账户关联在一起?

百度账户怎么与微信账户关联?百度每天都打开好多次,但是微信不一定,那么怎么才能把百度账户与微信账户关联在一起呢?下面我们一起来看看吧
收藏 0 赞 0 分享

12306官网史上最奇葩验证码:抢票软件都疯了

为了防范抢票软件,12303官网经常更换验证码,但无非就是或复杂或简单的字母加数字而已。今天,奇观出现了!下面就跟随小编一起详情来看看吧
收藏 0 赞 0 分享

以后不能抢票了 12306官网推出全新图片验证码导致抢票软件失效

以后不能抢票了!铁路官方购票网站12306又出新招,在登录界面推出了全新的验证方式,用户在填写好登录名和密码之后,还要准确的选取图片验证码才能登陆成功
收藏 0 赞 0 分享

12306新验证码怎么破解?12306新验证码破解方法

12306今天更新了验证码,然后所有的刷票软件都不能用了,那么12306新验证码可以破解吗?下文小编就为大家带来12306新验证码的破解方法,一起去看下吧
收藏 0 赞 0 分享

12306验证码怎么用?12306火车票订票网站图片验证码使用教程

12306火车票订票网站的验证码一直是困扰大家的一个大问题,太复杂又让广大乘客很受伤。12306推出了全新的图案验证码,下面跟小编一起来来看看12306图片验证码怎么操作的吧
收藏 0 赞 0 分享
查看更多