当浏览器第一次请求某个URL时,顺利访问的话,服务器返回状态200的状态,
同时会返回给浏览器一些Headers集合,例如set-cookie,Last-Mondified,Etag等等
下面重点说明Last-Mondified与Etag,即浏览器缓存.
HTTP/1.x 200 OK
Server:
Microsoft-IIS/7.5
Last-Modified: Thu,
31 Dec 2009 09:29:09 GMT
Etag:
"e46de5b4fb89ca1:0"
Expires: Thu, 07 Jan
2010 00:00:00 GMT
Last-Mondified:
最后一次修改时间
Etag:
资源的状态唯一标识(每个资源的etag都不同,例如img,js,css。。。。)
Expires:
指定资源在浏览器缓存中的过期时间 (需要在服务端设定)
浏览器接收到服务器这些信息后,就会将资源缓存在本地目录中,同时保存文件的上述信息.
如果有set-cookie的话,且浏览器未禁用cookie,则会保存cookie信息,当cookie过期时间大于当前时间时,浏览器会将cookie保存在本地硬盘.
下次发送时会同header头一起发送给服务器,当然条件是相同域,path约束相符等等情况下.
第二次请求时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 与 If-None-Match 报头,
这两个报头实际上是第一次请求时服务器返回的Last-Modified,Etag.发送这两个报头目地是询问服务器,该资源在时间内有没有被修改过.
如果该资源未被修改,则服务器会直接返回HTTP 304 (Not Changed.)状态码,内容为空,此时不会下载资源,浏览器则自动从缓存目录中读取资源.
使用Last-Modified/Etag 可以减少传输成本,但不会减少http请求
如果给文件加上关于过期时间(Expires)的header报文,这样浏览器就会先检查缓存中的文件,如果没有过期,就直接使用缓存中的文件,从而不会发送http请求.
前面描述的只是一些普通的浏览器缓存状态,在实际应用中,如页面跳转(点击页面链接跳转,window.open,在地址栏敲回车,刷新页面)等操作,会有一些区别
普通页面跳转包括链接点击跳转,用js脚本打开新页面(window.open),iframe时
第一次请求服务器返回200,并返回资源的Last-Modified/Etag,
第二次请求时,浏览器发送上次接收的Last-Modified/Etag,服务器直接返回304(HTTP/1.x 304 Not Modified)
如果设置了Expires,且未过期,浏览器直接从缓存目录中读取,不发送请求给服务器
F5刷新时
与普通请求区别在于,即便资源设置了Expires且未过期,浏览器也会发送相应请求,然后根据服务器返回状态来决定是否下载资源.
Ctrl+F5刷新时与无缓存时效果一样,服务器返回200(资源全部重新下载).
这点通过观察HTTP请求的头信息可以做更准确的判断。
其实明白上述的原理后,我们可以对web服务器header头进行合理的设置,从而可以大大提高性能.
以iis7为例,iis6设置差不多(iis管理--httpheaders选项卡--选择允许内容过期).
分享到:
相关推荐
Inside C#——C#编程从入门到精通_0.rar,对于学习c#很有帮助!!!!
这本书不用多说了,看书吧
《Inside VCL(深入核心——VCL架构剖析)》是台湾首席程序员李维先生的最新大作,相信大家都如雷灌耳,这里是书本的全套源码,喜欢大家喜欢。
j2me Inside J2VM——源代碼Inside J2VM——源代碼
数字互联网电视——“Linux inside”.pdf
进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning.pdf
Inside VCL,看看VCL架构,剖析VCL架构,深入核心地剖析。
藏经阁-AMAP INSIDE 智能定位带来的时代新机会——互联网世界底图.pdf
Inside VCL(深入核心——VCL架构剖析) (2008 年度畅销榜NO.22 ) <br>原书名: Inside VCL(深入核心——VCL架构剖析) 作者: 李维 著 <br> ☆领略优秀Framework之大局观! 追寻软件架构大师...
由 Dale Rogerson 撰写的《COM技术内幕——微软组件对象模型》(Inside COM)一书附带的源码适合在Visual C++ 6.0下编译,同样的源码拿到 Visual Studio 2010 下面进行编译,会报告很多错误。因此本人对源码中的错误...
Delphi 教程 系列书籍 (036) 《Inside 深入核心VCL架构剖析》 网友(邦)整理 EMail: shuaihj@163.com 【Delphi系列书籍下载】(辛苦整理,大家珍惜!!!) ...
Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...
Inside C++ Object Model/Inside C++ Object Model/Inside C++ Object Model/Inside C++ Object Model
Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...
Inside_NAND_Flash_Memories.pdf
Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...
inside ole 英文版,还是英文版看着舒服!inside ole 英文版,还是英文版看着舒服!inside ole 英文版,还是英文版看着舒服!inside ole 英文版,还是英文版看着舒服!inside ole 英文版,还是英文版看着舒服!...
Inside the C++ Object Model 中文版
如果由InsideSales支持人员或InsideSales管理员要求清除缓存和cookie,则此工具可以快速轻松地完成该任务! InsideSales.com并未正式支持此工具。 请仅使用后果自负。 尽管此工具应完全安全使用,但对于使用此工具...
Inside VCL(深入核心——VCL架构剖析) (2008 年度畅销榜NO.22 ) <br>原书名: Inside VCL(深入核心——VCL架构剖析) 作者: 李维 著 <br> ☆领略优秀Framework之大局观! 追寻软件架构大师...