在动态页面里象静态页面一样控制整个网页的缓存和更新

转载 2015年11月19日 14:42:48

静态页面我们都知道,WEB服务器在发回文件内容时会附带一个Last-Modified头信息,把静态文件的最后修改时间存储在里面,这样当下次浏览器请求该文件时,会把得到的这个Last-Modified头信息里的时间存在If-Modified-Since里一起发送给服务器,告诉服务器本地缓存的最后修改时间,当服务器接收到有If-Modified-Since时间信息的请求时,会先判断文件的最后修改时间是否比这个时间晚,晚就说明有更新,就会重发文件内容,并附带最新的Last-Modified头信息给客户端,如果时间相等或者比这个时间早,那就说明没有更新,缓存完全同步,就会直接发回一个304 Not Modified状态码,并且停止重发文件内容,可以节省不必要的数据传输。

 

  以上是静态页面的缓存和更新控制机制,一般这一切都是由WEB服务器直接包办处理的,完全不需要用户干预。但动态页面就没这么幸运了,由于对动态页面的请求,都是由WEB服务器转接给特定的页面处理程序来完成,而且不会包办其缓存和更新的策略问题,所以这些控制就必须有程序员自己来完成了。然而更不幸的是,动态页面处理程序自己是无法自动处理缓存的,特别是整页面级别的缓存,我们可以在代码里缓存一个变量以便于下次调用,但仍然要执行很多程序代码,能不能像静态页面那样,给客户端一个Last-Modified头信息,下次请求时再判断这个时间和数据的更新时间,以便决定是否重复处理和发送数据?

 

  从以上分析来看这是完全可行的,不过需要对脚本程序做特殊处理,也就是需要一个逻辑来规范这个更新的检测,当然这里不是重点讨论这个了。因为客户端接受最后修改时间完全是依靠Last-Modified头信息,所以只要动态脚本能在发回内容的时候也输出一个时间作为判断依据的话,那么下次客户端请求同一个页面(准确的说应该是同一个URL地址)的话,会把接收到的Last-Modified头信息里的时间也附加到If-Modified-Since请求过来。到了动态页面这里,我们就可以获取到这个请求附带的最后修改时间,然后先判断时间点之后是否有新处理的数据,没有新数据的话,我们就直接结束当前脚本,就可以节省服务端资源。当然结束脚本之前,需要发挥一个304的状态码,因为要让客户端确认使用缓存的话,也必须依赖这个状态码,所以只需要用动态脚本发回一个的304 Not Modified头信息就可以了,不但节省了服务器脚本的执行资源,还节省了流量,可谓一举两得,而且应用形式更灵活更可控。

动态内容缓存

原文:http://blog.csdn.net/u010425776/article/details/51089204什么是动态内容缓存?浏览器向服务器发送请求后,服务器会根据浏览器的要求做相应的处理...
  • YiZhiCXY
  • YiZhiCXY
  • 2016年08月27日 19:09
  • 2302

动态内容缓存

4.1 缓存与速度     这里所说的动态内容缓存是自行实现的缓存机制,包括整页缓存、局部缓存、数据缓存等。     缓存的目的是把花费昂贵开销的计算结果保存起来,以后需要的时候直接取出,避免重复...
  • tujiyue
  • tujiyue
  • 2011年12月03日 12:41
  • 5429

架构高性能网站秘笈(二)——动态内容缓存

什么是动态内容缓存? 浏览器向服务器发送请求后,服务器会根据浏览器的要求做相应的处理(如:数据库操作),然后将处理后的结果注入JSP页面生成HTML,最后将生成的HTML返回给浏览器显示。我们知道,...
  • xingxing513234072
  • xingxing513234072
  • 2016年04月12日 13:43
  • 426

HTML页面每次打开的时候都清除页面缓存

解决办法为: (1) 用HTML标签设置HTTP头信息 说明:HTTP头信息“Expires”和“Cache-Control”为应用程序服务器提供了...
  • lml_little
  • lml_little
  • 2016年05月31日 15:11
  • 11293

HTTP 304状态码的详细讲解

HTTP 304错误状态码的详细讲解 304缓存策略及实现 网页web常见状态码:200,301,302,304,400,401,404,500...
  • huwei2003
  • huwei2003
  • 2017年04月12日 10:33
  • 3852

在动态页面里象静态页面一样控制整个网页的缓存和更新

静态页面我们都知道,WEB服务器在发回文件内容时会附带一个Last-Modified头信息,把静态文件的最后修改时间存储在里面,这样当下次浏览器请求该文件时,会把得到的这个Last-Modified头...
  • wxw_317
  • wxw_317
  • 2015年11月19日 14:42
  • 1063

高并发web系统调优(四)增加页面片段缓存

增加了 squid 做缓存后,整体系统的速度确实是提升了, webserver 的压力也开始下降了,但随着访问量的增加,发现系统又开始变的有些慢了,在尝到了 squid 之类的动态缓存带来的好处后,开...
  • dhdhxgx
  • dhdhxgx
  • 2016年12月14日 17:45
  • 312

关于静态页面和动态页面的解释

由于小伙伴经常搞不清楚动态页面和静态页面的区别 这里讲一下 一、静态web页面: 1、在静态Web程序中,客户端使用Web浏览器(IE、FireFox等)经过网络(Network)连...
  • yinzhipeng123
  • yinzhipeng123
  • 2016年11月04日 19:24
  • 826

(写给初学者)静态页面和动态页面的区别

一、静态web页面: 1、在静态Web程序中,客户端使用Web浏览器(IE、FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现...
  • hehaiwei1234
  • hehaiwei1234
  • 2016年11月24日 10:28
  • 986

动态生成html缓存页面

动态缓存访问的html页面,过滤器实现。 需求:例如买书网站,有成千上万本图书,用户可以点击图书的链接查看图书的详细信息,但如果每一次查看都要访问数据库的话,就会造成资源的极大浪费,为了节约我们有限...
  • xzm_rainbow
  • xzm_rainbow
  • 2013年11月10日 19:43
  • 1305
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在动态页面里象静态页面一样控制整个网页的缓存和更新
举报原因:
原因补充:

(最多只允许输入30个字)