`
悟小元
  • 浏览: 8127 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Inside HTTP —— 浏览器缓存机制

 
阅读更多

当浏览器第一次请求某个URL时,顺利访问的话,服务器返回状态200的状态,

同时会返回给浏览器一些Headers集合,例如set-cookie,Last-Mondified,Etag等等

下面重点说明Last-MondifiedEtag,即浏览器缓存.

 

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#编程从入门到精通

    《Inside C#——C#编程从入门到精通》是一本专为初学者和有经验的开发者设计的C#编程指南,旨在帮助读者深入理解和熟练掌握C#语言的核心概念和技术。这本书详细介绍了C#的各个方面,从基础语法到高级特性,为读者...

    Inside C#——C#编程从入门到精通_0.rar

    《Inside C#——C#编程从入门到精通》是一本旨在帮助初学者和有经验的开发者深入了解C#编程语言的指南。C#是由微软开发的一种面向对象的编程语言,广泛应用于Windows应用程序、游戏开发、Web服务以及.NET框架下的...

    Inside Windows Debugging.pdf

    本书《Inside Windows Debugging》由Tarik Soulami撰写,得到了微软公司的授权,由O’Reilly Media, Inc.出版。该书结合最佳实践和常见的调试与编程技巧,很多技巧在其他书籍中尚未被记录下来。在本书的整个阅读过程...

    j2me Inside J2VM——源代碼

    《J2ME Inside J2VM——源代码》是关于Java Micro Edition(J2ME)在Java ...通过深入研究《J2ME Inside J2VM——源代码》,开发者可以获得对J2ME平台核心机制的深刻理解,从而提升在嵌入式和移动领域的开发能力。

    《Inside VCL(深入核心——VCL架构剖析)》配书源码

    《Inside VCL(深入核心——VCL架构剖析)》是一本深入探讨VCL(Visual Component Library)架构的专业书籍,由知名台湾程序员李维先生撰写。这本书籍旨在帮助读者理解VCL的核心机制,从而更好地利用这一强大的组件库...

    藏经阁-AMAP INSIDE 智能定位带来的时代新机会——互联网世界底图.pdf

    藏经阁-AMAP INSIDE 智能定位带来的时代新机会——互联网世界底图 随着移动互联网的飞速发展,智能定位技术正在改变人们的生活方式。AMAP INSIDE 智能定位系统,以其强大的地图数据生产能力和精准的位置服务,正在...

    Inside VCL(深入核心——VCL架构剖析)

    Inside VCL,看看VCL架构,剖析VCL架构,深入核心地剖析。

    数字互联网电视——“Linux inside”.pdf

    标题中的“数字互联网电视——“Linux inside””指的是在电视技术中嵌入Linux操作系统,以实现互联网功能的新型电视。这种电视集成了传统电视的观看功能和计算机的网络应用,开启了电视产业的一个新阶段。 描述中...

    CLRInsideOut.zip

    《深入理解CLR Inside Out》是针对.NET Framework中的Common Language Runtime(CLR)的工具,它能够帮助开发者特别是熟悉C/C++的程序员将C/C++结构体转换为C#结构体,以便在.NET环境中进行编程。这个工具对于那些...

    ios内置浏览器

    在iOS应用开发中,"内置浏览器"是一种常见功能,它允许开发者在应用程序内部提供一个浏览网页的环境,而无需离开应用。这样的设计提高了用户体验,因为用户可以在不切换应用的情况下访问外部链接。标题“ios内置...

    深入核心——VCL架构剖析.part2

    Inside VCL(深入核心——VCL架构剖析) (2008 年度畅销榜NO.22 ) <br>原书名: Inside VCL(深入核心——VCL架构剖析) 作者: 李维 著 <br> ☆领略优秀Framework之大局观! 追寻软件架构大师...

    Inside SQLite(SQLite技术内幕) 原版+个人翻译版

    文档可能会详细阐述SQLite如何在内存和磁盘之间管理数据,包括页缓存机制、B-Tree数据结构的使用以及VFS(Virtual File System)层如何允许SQLite在不同操作系统上运行。此外,作者可能还讨论了SQL语句的解析和执行...

    进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning.pdf

    Apollo 规划技术详解 ——Optimization Inside Motion Planning.pdf 本文主要讲解了自动驾驶软件中运动规划技术的核心概念和方法,包括动态规划、 二次规划、启发式搜索方法等。 动态规划是一种优化方法,将问题从...

    ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.002

    Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...

    ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.006

    Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...

    Inside游戏效果文档

    文档标题为《Inside游戏效果文档》,描述了PlayDead公司在制作游戏《Inside》时所采用的渲染技术。文档内容涉及了游戏中的雾效、HDR泛光(bloom)以及其他与光照和渲染相关的高级技术。这些技术对于创造游戏的独特...

    李维Inside VCL附书源码

    本书深入探讨了VCL的内部工作机制,包括组件的生命周期、事件处理、属性、方法和继承机制。它详细介绍了如何利用VCL的面向对象特性进行代码复用和自定义组件设计,以及如何利用VCL与Windows API的交互来扩展功能。...

    《COM技术内幕——微软组件对象模型(Inside COM)》一书部分源码 for VS 2010

    由 Dale Rogerson 撰写的《COM技术内幕——微软组件对象模型》(Inside COM)一书附带的源码适合在Visual C++ 6.0下编译,同样的源码拿到 Visual Studio 2010 下面进行编译,会报告很多错误。因此本人对源码中的错误...

    036_《Inside 深入核心VCL架构剖析》(1/5)

    Delphi 教程 系列书籍 (036) 《Inside 深入核心VCL架构剖析》 网友(邦)整理 EMail: shuaihj@163.com 【Delphi系列书籍下载】(辛苦整理,大家珍惜!!!) ...

    ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.004

    Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...

Global site tag (gtag.js) - Google Analytics