标签:
关于浏览器对静态文件的缓存问题
当浏览器第一次加载页面的时候,浏览器会向服务器请求页面中的静态文件(css,js,image),此时服务器将返回完整的文件内容且返回 200 表示请求成功的状态码。而当用户再次点击刷新按钮或按下 F5 刷新页面时,浏览器将有如下动作。
当服务器同时设置 Last-Modified ,Etag(Entity Tag), Expires 时,先判断 Expire ,若当前时间与Expire设置的时间相比还没过期,且移除了 Entity Tag,则浏览器直接使用已缓存的文件(不用向服务器发送请求),这时返回的是200(from cache)。若 Entity Tag 存在,则发送 Http 请求,服务器先判断 last-modified ,再判断 Etag ,必须都没有过期,才能返回 304 响应。
其中判断 Last-Modified(文件最后一次改动时间)是否过期的过程是这样的,第一次请求文件的时候若文件中带有 Last-Modified 设置的时间,则下次请求该文件时,浏览器会将该时间值存于If-Modified-Since中同时发送给服务器,服务器接收到该值后会与最近的一次文件改动时间做比较,若比较相同,则返回 304 状态码,告诉浏览器你可以调用缓存中的文件而不用再来我服务器这再拿一次数据。Etag 原理与 Last-Modified 类似,只是存放的值不同而已,Last-Modified存放的是时间,而Etag严格来说并没有特殊的格式,可以把它看成一种标识符,且与 If-Modified-Since 对应的,浏览器传给服务器的 Etag 值存放于If-None-Match中。
by-zhan
标签:
原文地址:http://www.cnblogs.com/lijiazhan/p/4530847.html