web开发中的缓存问题的研究(二)

http://tech.ddvip.com   2007年10月15日    社区交流

内容摘要:HttpServlet类为If-Modified-Since请求头和Last-Modified头字段的这种应用提供了处理机制,当继承了HttpServlet类的Servlet程序接收到一个GET方式的访问请求时,HttpServlet中重载的service方法在调用doGet方法之前,它还将调用getLastModified方法,并根据getLastModified方法的返回值来决定是否调用doGet方法和在响应消息中是否生成Last-Modified头字段

  在浏览器的“检查所存网页的较新版本”的功能项采用默认的“自动”设置项的情况下,如果浏览器刚刚访问过一个网页,服务器端就更新了这个网页的内容,当浏览在关闭前又重新访问这个页面时,用户看到的将不是更新的网页内容,而是过期的网页内容。为了提高浏览效率,在访问静态的网页内容时,这么一点小概率的过期信息还是应该允许的,并且这些过期信息也不会造成什么不好的后果,就像你偶尔有一次看到了前一天发生的新闻,而不是当天的新闻,这又有什么问题呢?可是,如果浏览器访问的是一个动态网页,这本来就要求浏览器在其整个运行期间的每次访问都能看到最新的内容,例如,销售一件商品后再回到商品库存的显示页面时,看到的就应该是更新的库存数据,而不应该是先前看到的内容。仅仅根据被访问页面的资源名称,浏览器是无法知道商品库存的显示页面是属于动态内容,还是属于静态内容。对于这种情况,浏览器将根据响应消息中是否包含Last-Modified头字段来进行处理,如果响应消息中没有包含Last-Modified头字段,它将在每次访问此页面时都向服务器发出访问请求,否则,它仅在每次启动运行后的第一次访问此页面时才向服务器发出访问请求,而在启动运行期间对此页面的后续访问都不再向服务器发出访问请求。

  在第2章中曾经讲解过,响应消息中的Last-Modified头字段可用于指定响应内容的最后更新时间,当客户机缓存此文档内容后,它在以后的请求消息中将根据Last-Modified头字段指定的时间来生成If-Modified-Since请求头字段,以指出缓存文档的最后更新时间。只有文档的修改时间比If-Modified-Since请求头指定的时间新时,服务器才会返回文档内容。如果自从If-Modified-Since指定的时间以来,网页内容没有发生修改,服务器将返回一个304(NotModified)状态码来表示浏览器缓存的版本是最新的,而不会向浏览器返回文档内容,浏览器则继续使用以前缓存的内容。通过这种方式,可以在一定程度上减少浏览器与服务器之间的通信数据量,从而提高了通信效率。

责编:豆豆技术应用

正在加载评论...