86-浏览器缓存中的部分变量简析

1、Last-Modified

在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记(HttpReponse Header)此文件在服务期端最后被修改的时间,格式类似这样:

Last-Modified:Tue, 24 Feb 2009 08:01:04 GMT

客户端第二次请求此URL时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头(HttpRequest Header),询问该时间之后文件是否有被修改过:

If-Modified-Since:Tue, 24 Feb 2009 08:01:04 GMT

如果服务器端的资源没有变化,则自动返回HTTP304(NotChanged.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。

注:如果If-Modified-Since的时间比服务器当前时间(当前的请求时间request_time)还晚,会认为是个非法请求

2、Etag工作原理

HTTP协议规格说明定义ETag为“被请求变量的实体标记”(参见14.19)。简单点即服务器响应时给请求URL标记,并在HTTP响应头中将其传送到客户端,类似服务器端返回的格式:

Etag:“5d8c72a5edda8d6a:3239″

客户端的查询更新格式是这样的:

If-None-Match:“5d8c72a5edda8d6a:3239″

如果ETag没改变,则返回状态304。

即:在客户端发出请求后,HttpReponse Header中包含Etag:“5d8c72a5edda8d6a:3239″

标识,等于告诉Client端,你拿到的这个的资源有表示ID:5d8c72a5edda8d6a:3239。当下次需要发Request索要同一个URI的时候,浏览器同时发出一个If-None-Match报头(Http RequestHeader)此时包头中信息包含上次访问得到的Etag:“5d8c72a5edda8d6a:3239″标识。

If-None-Match:“5d8c72a5edda8d6a:3239“

,这样,Client端等于Cache了两份,服务器端就会比对2者的etag。如果If-None-Match为False,不返回200,返回304(Not Modified) Response。

3、Expires

给出的日期/时间后,被响应认为是过时。如Expires:Thu, 02 Apr 2009 05:14:08 GMT

需和Last-Modified结合使用。用于控制请求文件的有效时间,当请求数据在有效期内时客户端浏览器从缓存请求数据而不是服务器端.当缓存中数据失效或过期,才决定从服务器更新数据。

4、Last-Modified和Expires

Last-Modified标识能够节省一点带宽,但是还是逃不掉发一个HTTP请求出去,而且要和Expires一起用。而Expires标识却使得浏览器干脆连HTTP请求都不用发,比如当用户F5或者点击Refresh按钮的时候就算对于有Expires的URI,一样也会发一个HTTP请求出去,所以,Last-Modified还是要用的,而且要和Expires一起用。

5、Etag和Expires

如果服务器端同时设置了Etag和Expires时,Etag原理同样,即与Last-Modified/Etag对应的HttpRequestHeader:If-Modified-Since和If-None-Match。我们可以看到这两个Header的值和WebServer发出的Last-Modified,Etag值完全一样;在完全匹配If-Modified-Since和If-None-Match即检查完修改时间和Etag之后,服务器才能返回304.

6、Last-Modified和Etag

分布式系统里多台机器间文件的last-modified必须保持一致,以免负载均衡到不同机器导致比对失败

分布式系统尽量关闭掉Etag(每台机器生成的etag都会不一样)

Last-Modified和ETags请求的http报头一起使用,服务器首先产生Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改,来决定文件是否继续缓存

过程如下:

1.客户端请求一个页面(A)。

2.服务器返回页面A,并在给A加上一个Last-Modified/ETag。

3.客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。

4.客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。

5.服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。

注:

1、Last-Modified和Etag头都是由WebServer发出的HttpReponse Header,WebServer应该同时支持这两种头。

2、WebServer发送完Last-Modified/Etag头给客户端后,客户端会缓存这些头;

3、客户端再次发起相同页面的请求时,将分别发送与Last-Modified/Etag对应的HttpRequestHeader:If-Modified-Since和If-None-Match。我们可以看到这两个Header的值和WebServer发出的Last-Modified,Etag值完全一样;

4、通过上述值到服务器端检查,判断文件是否继续缓存;

7、关于 Cache-Control: max-age=秒 和 Expires

Expires = 时间,HTTP 1.0 版本,缓存的载止时间,允许客户端在这个时间之前不去检查(发请求)

max-age = 秒,HTTP 1.1版本,资源在本地缓存多少秒。

如果max-age和Expires同时存在,则被Cache-Control的max-age覆盖。

Expires 的一个缺点就是,返回的到期时间是服务器端的时间,这样存在一个问题,如果客户端的时间与服务器的时间相差很大,那么误差就很大,所以在HTTP 1.1版开始,使用Cache-Control: max-age=秒替代。

Expires =max-age +   “每次下载时的当前的request时间”

所以一旦重新下载的页面后,expires就重新计算一次,但last-modified不会变化

时间: 2024-10-14 09:02:17

86-浏览器缓存中的部分变量简析的相关文章

SylixOS中TPSFS格式化流程简析

1.TPSFS简介 TPSFS文件系统是一款掉电安全的文件系统,该系统是SylixOS内建文件系统(专利技术),该文件系统有如下特点: 采用B+树存储文件数据,读取与定位速度快,空间管理效率高: 对数据使用原子操作,掉电安全: 64位文件系统,支持EP级别文件长度: 大文件处理性能好: 支持文件记录锁,可支持大型数据库: 支持多块分配机制,提高了系统性能,使得分配器有了充足的优化空间: 支持子目录可扩展性,使得在一个目录下可以创建无数多个子目录. TPSFS文件系统结构如图 1.1所示. 图 1

URL链接中的utm_source,utm_medium简析

工作中须要分析一些链接,统计分析一些信息.比方例如以下的链接: http://lightapplication.xxxx.com/?utm_source=ucweb&utm_medium=cpt&utm_term=zhilian&utm_content=textlink&utm_campaign=nov 这个链接中带有一些參数,这些參数是什么意思呢.一直非常好奇,如今须要用到这些信息了.对于站点主,这些參数信息非常实用,能够统计用户的来源. 在google中搜索utm_so

python中的random模块简析

在Python生成随机数用random模块,下面的文章是本人自己简单总结的ython生成随机数与random模块中最常用的几个函数的关系,希望对大家有所帮助. random.random()用于生成随机符点数,括号内没有参数:random.uniform(a,b)用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限;random.randint(a,b)用于生成一个指定范围内的整数.其中参数a是下限,参数b是上限;random.randrange(a,b)用于指定范围a--b内

solr在电商平台中的使用示例简析

来源:http://blog.csdn.net/yangbutao/article/details/9450463 在电商平台中搜索是非常重要的功能,主要包括有搜索词类目导航.自动提示和搜索排序功能 自动提示如下图显示的,可以根据搜索词自动进行提示,并在列表中显示推荐的搜索词的document数量 类目导航如下图所示,比如在搜索框中搜索“牛奶”,则把相关的类目和当前类目对应的属性显示出来 下面就以上几种功能做示例讲解. 1.搜索排序 搜索功能中比较复杂的是文档的打分排序,solr中的打分规则继承

HTTP请求中浏览器缓存

本文导读:浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制.客户端缓存是否需要是可以在服务端代码上控制的.那就是响应头.响应头告诉缓存器不要保留缓存,缓存器就不会缓存相应内容:如果请求信息是需要认证或者安全加密的,相应内容也不会被缓存.那么,HTTP请求中浏览器是如何缓存数据呢? 一.HTTP请求中浏览器缓存流程图 1.浏览器第一次请求 2.浏览器再次请求时 二.HTTP请求中浏览器缓存流程的文字描述 1.当资源第一次被访问的时候,HTTP头部如下 (Request-Line) GET /

浏览器缓存机制(2)-应用缓存

浏览器缓存机制(2)-应用缓存 在公司项目中,一些移动版的WEB页面恰好用到了应用缓存,故顺便写篇文章来总结下应用缓存方面的内容. 1.应用缓存简介 应用缓存(application cache)是HTML5提供的一套缓存机制,使得WEB应用可以离线运行.除了一些旧版本的IE外,现代浏览器如firefox,chrome,safari大部分都是支持HTML5标准的.使用应用缓存主要优势有: 离线浏览:用户可以在离线状态浏览网页内容. 速度更快: 因为数据存储在浏览器缓存中,浏览器只会下载服务器发生

关于浏览器缓存

缓存分为2种: 1.  强缓存: 直接从本地缓存中取资源,不会和服务器通信,返回的http状态码是200(from cache): 2.  协商缓存:通过服务器来告知是否能用本地缓存.先和服务器通信,如果返回可以使用本地缓存的指示,再从本地缓存中取(服务器不会返回被请求资源,返回的状态码是403(Not Modified)):如果不可以使用本地缓存就会返回最新的资源: 浏览器发起第二次相同的请求时会先判断能不能使用强缓存,不行的话,再判断能不能使用协商缓存(如果没有设置强缓存,协商缓存也不会生效

深入了解浏览器缓存原理

浏览器缓存将文件保存在客户端,好的缓存策略可以减少对网络带宽的占用,可以提高访问速度,提高用户的体验,还可以减轻服务器的负担.因此我们有必要了解它的实现原理,用来提高网站的性能. 当一个客户端请求web服务器, 请求的内容可以从以下几个地方获取:服务器.浏览器缓存中或缓存服务器中.这取决于服务器端输出的页面信息.页面文件有三种缓存状态. 1.最新的:选择不缓存页面,每次请求时都从服务器获取最新的内容. 2.未过期的:在给定的时间内缓存,如果用户刷新或页面过期则去服务器请求,否则将读取本地的缓存,

浏览器缓存相关http头

最近看雅虎黄金34条,学习下优化网站性能的方法.其中有一条:"为文件头指定Expires或Cache-Control",具体来说指对于静态内容:设置文件头过期时间Expires的值为"Never expire"永不过期:而对于动态内容:使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求. 这一条可以和雅虎34条的第一条联系起来,那就是尽量减少http的请求次数(雅虎34条很多都是努力去减少http请求为目的的),毕竟如果有太多的资源需要下载需要新