浏览器缓存工作机理理解

  浏览器与web服务器之间,存在的http通信协议,很好的保证了浏览器加载网页的速度。

  如何提高网页的加载速度,提升用户体验,浏览器的缓存机制,以及协议控制,已经在很大程度上保证了这点的实现。这两种机制下的实现原理如下:

  首先,浏览器第一次向服务器发送请求时,服务器除了将内容响应外,还会添加http响应头,响应头里可以包含缓存的时间expires,last-modified,etag等信息内容。这些信息是可以在web服务器中设置的,包括expires的失效时常等,对于不同的web服务器,如apache何tomcat,设置方式又是不一样的,对于apche和tomcat的区别,以及设置方式,下面会讲到。然后,浏览器将内容存入自己的缓存cache中。当浏览器第二次发送请求时,首先会检查缓存。如果对于该资源的请求上一次已经发生,那么缓存中就存有该资源。所以,浏览器会首先检查该请求对应的资源的expires是否过期,如果没有,则直接从缓存中取出该资源,否则的话,就再次发送请求。对于再次发送的请求,会包含请求头,请求头中的内容包含If-modified-since,if-no-match,这和第一次从服务器传过来的响应头的last-modified,etag对应的。服务器接收到请求后,首先会解析请求头,取出if-modified-since与现在的last-modified匹配,若没有变化,则直接返回304响应信息,浏览器从缓存中取出数据;否则,从新发送资源响应。etag和last-modified的效果是一样的,用来标识判断资源是否发生变化,区别在于,last-modified只能处理秒级别的变化,而etag是资源大小、last-modified等的hash结果,能够反映1秒内的多次变化,在优先级上高于last-modified。所以,对于静态文件,根本就没必要设置expires的过期时间,因为服务器会根据Last-modified/etag,来返回304请求状态。


  对于改变缓存时间,针对不同的web服务器,方式是不一样的。详解如下:

apache与tomcat

apache是处理静态页面的web服务器,其优点可以添加模块方便的进行开发。tomcat是apache下的一个子项目,用来处理动态页面,如jsp等,是一个容器,它可以独立apache运行。apache是一量车子,可以装在静态资源,如html;而对于动态资源,如jsp,可以看成是流动的水,需要瓶子这样的容器装罐,才能放人车子中运输,而tomcat就是这样的容器,并且它可以独立apache运行。apache和tomca可以整合,具体整合方式,google一下吧~~~

apache 的改变方式,参考http://baozoutianshi.blog.sohu.com/103149437.html

tomcat的方式,参考http://qin686-163-com.iteye.com/blog/287782,这种方式对于tomcat7一下是可以的,好像只能用这种方法,配置文件中并没有提供处理元素。在其官方文档中没有见到相应的处理介绍http://tomcat.apache.org/tomcat-6.0-doc/。在这里解释一下,max-age。添加Expires头可以有效减少Http请求次数,只要浏览器中有缓存,并且相应的资源未过期,均可以使用缓存中的资源,无须再发送请求到服务器;
http1.0中使用如下的响应头信息:
Expires Fri, 15 Apr 2016 20:00:00 GMT
http1.1则使用如下的响应关信息:
Cache-Control : max-age=315200014详见http://blog.chinaunix.net/uid-664509-id-3337113.html。

此外对于不同版本的tomcat,处理方式是不一样的,tomcat7,参考http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Expires_Filter


在使用filter处理方式时,如对filter不理解,参考http://blog.csdn.net/yudaoai/article/details/4231333

对于url-pattern不理解,参考http://blog.csdn.net/bishuixingqing/article/details/4191977

其它参考资料:http://qin686-163-com.iteye.com/blog/287782(浏览器服务器工作原理)

                            http://hi.baidu.com/cliff/item/889beb0e442c1991a3df43ef(个人选择的做测试的方法)



你可能感兴趣的:(浏览器缓存工作机理理解)