浏览器缓存 - Rambing - JavaEye技术网站

来源:百度文库 编辑:神马文学网 时间:2024/04/29 00:40:23
2010-07-20

浏览器缓存

文章分类:Web前端 1.1 浏览器的缓存应用
1.1.1 概述
   游览器缓存可以有效的解决同一客户端用户的多次访问的快速响应问题。一个客户可能多次访问同一个页面,使用了浏览器缓存,直接可以从客户的本地获取缓存的数据,从而可以有效减少用户的访问次数,从而减轻服务器的负担。最常用的是对于图片,JS,CSS, HTML等静态资源实现浏览器级别的缓存。

1.1.2 浏览器缓存的结构
  浏览器的缓存是基于HTTP请求包。一个HTTP的响应包中包含如下的头信息。该响应头中列出了缓存相关的几个重要的几个字段。

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
Cache-Control: max-age=10

其中Last-Modified, Etag和Expires,Cache-Control是和浏览器的缓存和缓存处理密切相关的四个字段。前两个字段是条件缓存控制参数,浏览器会根据这两个字段的值向服务器发送一个请求,询问所需的资源是否已经更改,如果没有更改直接使用本地文件,否则重新从服务器下载。主要可以减少服务器的流量,但是不会减少请求数。后两个这是缓存时间设定参数,只有设定了过期参数的页面,浏览器会先查看是否过期,如果没有过期直接使用本地缓存,不再向服务器请求。如果已经过期才向服务器发送请求。
Last-Modified:指定被请求资源上次被修改的日期和时间。例如:Last-Modified: Mon,10PR 18:42:51 GMT
Etag:一种实体头标,它向被发送的资源分派一个唯一的标识符。
Expires:指定实体的有效期。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
Cache-Control:一个用于定义缓存指令的通用头标。例如:Cache-Control: max-age=30。

1.1.3 浏览器的缓存请求过程
当浏览器第一次请求某个URL时,顺利访问的话,服务器返回状态200的状态,  同时会返回给浏览器一些Headers集合,如果设定只是设定了Last-Modified和Etag头信息,那么浏览器接收到服务器这些信息后,就会将资源缓存在本地目录中,同时保存文件的上述信息.  第二次请求时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 与 If-None-Match 报头这两个报头实际上是第一次请求时服务器返回的Last-Modified,Etag.发送这两个报头目地是询问服务器,该资源在时间内有没有被修改过。如 果该资源未被修改,则服务器会直接返回HTTP 304 (Not Changed.)状态码,内容为空,此时不会下载资源,浏览器则自动从缓存目录中读取资源。使用Last-Modified和Etag 可以减少传输成本,但不会减少http请求数量。如果给文件加上关于过期时间(Expires)的header报文,这样浏览器就会先检查缓存中的文件,如果没有过期,就直接使用缓存中的文件,从而不会 发送http请求。

1.1.4 浏览器的不同请求方式
      浏览器请求包括普通页面请求(链接点击跳转,用JS脚本打开新页面,使用IFRAME时)。F5刷新时和Ctrl+F5三种方式。在1.1.3中描述的是对于普通页面请求的情况。F5刷新忽略缓存的过期设定,每次发送请求到服务器端。而CTRL + F5则是与无缓存时效果一样处理,强制重新下载。

1.1.5 设定浏览器缓存
      当前常用的应用服务器,都可以对于一般的纯静态页面,如HTML、GIF、JPG、CSS、JS等页面进行缓存头信息的设定。例如Apache服务器会对自动读取静态文件中的Last-Modified字段添加到HEADER中,并且会对所有的页面(包括动态页面)加上ETag信息到HEADER。也可以使用FILTER动态的对于需要的页面加入这些缓存HEADER的添加,增加浏览器的缓存的使用。