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

转贴请注明出处: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设定来解决。如果可能,也可以把目标服务器排除在代理目标之外。

(0)

相关推荐

  • 怎么解决苹果手机iPhone XS更新和下载应用时卡住问题

    苹果手机iPhone XS下载和更新应用时,屏幕可能会变成灰白色,今天,小编给大家分享苹果手机iPhone XS更新和下载应用时卡住问题的解决方法,希望对大家有所帮助.具体如下:1.首先,大家不要急着 ...

  • 如何关闭并自动更新Excel数据链接更新提示

    在Excel工作簿中链接其他工作簿中的数据是相当常见的。但每次打开这样的工作簿时,Excel都会自动弹出一个“是否要进行数据链接更新”的提示对话框,很是烦人。下面我们就让它“消失”并且自动更新数据链接 ...

  • 保持并关闭Excel数据链接更新提示

    在Excel工作簿中链接其他工作簿中的数据是相当常见的。但每次打开这样的工作簿时,Excel都会自动弹出一个“是否要进行数据链接更新”的提示对话框,很是烦人。下面我们就让它“消失”并且自动更新数据链接 ...

  • Word2007:表格数据自动更新的妙招

    我们知道,在Word2007可以插入表格,也就是可以进行一些简单的数据计算,而前面我们了解了Word中域插入的方法.对于更改了Word中的表格数据后,数据并并不会自动计算更新,这时就要单击右键选择更新 ...

  • 解决win8提示"无法更新系统保留分区"的方法

    windows系统更新是为了保证系统能够在健康安全的环境下运行,大部分的系统更新一般都是为了解决系统自身的BUG和相关后门的封堵,通常系统下更新都是由系统自动完成的,不过有部分win8.1用户在使用系 ...

  • 解决iTunes 无法联系更新服务器的问题

    问题的表现 尝试在 iTunes 7 或更高版本中更新或恢复 iPhone.iPad 或 iPod 时,您可能会看到以下警告信息之一. iPhone: "iTunes 未能联系 iPhone ...

  • Win10一周年累积更新补丁KB3194496安装失败的解决方法 附独立更新包下载

    早些时候微软向 Windows Insider Slow Ring 和 Release Preview 发布了新累积更新补丁 KB3194496.现在这枚累积更新补丁也向 Windows 10 正式版 ...

  • 高德地图车机版 最新版本V2.8.2地图数据+软件更新方法

    最近购买了android的车载导航,导航用的是高德地图车机版,原车用的版本是2.0的版本,跟最近的2.8.2的差别有点大,这里就为大家分享一下如果将软件升级到2.8.2,地图也跟进更新到最新版本,方便 ...

  • 如何快速解决“iPhone手机无法更新iOS系统”问题?

    相信很多小伙伴都有在使用iPhone苹果手机,如果手机无法更新iOS系统了该怎么办呢?下面小编就来为大家介绍解决方法.具体如下:1. 首先,我们需要查看一下手机的储存空间是否足够以及电量是否充足.2. ...