web浏览器下的缓存 - Etag

设置浏览器缓存的几种方法:
  1. Last-Modified : 服务器上文件的最后修改时间
  2. Etag  : 文件标识
  3. Expiers : 本地缓存目录中文件过期的时间 ( 由服务器指定具体的时间 )
  4. Cache-control  缓存控制

浏览器端的缓存规则
  • 对于浏览器端的缓存规则是在HTTP协议头和 HTML 页面 Meat 标签中定义的。分别从 新鲜度 和 校验值两个维度来规定浏览器是否可以直接使用缓存中的副本,还是需要到原服务器获取更新的版本
    • 新鲜度 ( 过期机制 ) :也就是缓存副本有效期。
      1. 含有完整的过期时间控制头信息 ( HTTP协议报头),并仍在 有效期内
      2. 浏览器已经使用过这个缓存版本,并且在一个会话中已经检查过新鲜度
      3. 满足以上两个条件之一,则浏览器会直接从缓存中获取副本并渲染
    • 校验值 ( 验证机制 )  : 服务器返回资源的时候有时在控制头信息带上这个资源的实体标签 Etag ( Entity Tag) , 它可以用来作为浏览器再次请求过程的校验标识。如果发现校验标识不匹配,说明资源已经被修改或过期,浏览器需求重新获取资源内容。

注解:什么是Etag  
  • Etag 是 URL 的 Entity Tag , 用于标识 URL 对象是否改变,区分不同语言和Session等等。具体内部含义是服务器控制的,就像cookie那样。
    • 实例解析 : 当打开一个新的页面时 ,浏览器会向服务器发送一个http请求,服务器会生成一个 Etag 码 ( 标识当前被请求的文件) ,Etag 码放在 http 响应头 Response Headers中返回给浏览器

                

                  此时,服务器端返回的响应值为200,并发送了相应的网页内容,在http响应头中有 etag  消息头,值为ETag:   "87e2-524b6f1077980"  . 
                 然后刷新页面,浏览器再次向服务器发送http请求,此时请求头中包含 If-None-Match 消息头 ,它的值为If-None-Match :   "87e2-524b6f1077980"    . 该值的内容和先前第一次刷新返回的http响应中的 ETag 头完全一样。

                  

                 此时,若 webserver 端的文件没有变化,这时  If-None-Match的值和 server 端的 etag 值相比完全相等,服务器认为客户端已经有最新的该文件的缓存了,服务器返回浏览器一个响应码为 "304"的http响应,它不包含任何响应的内容,只是提示客户端缓存的内容是最新的。
                若 webserver 端的文件发生变化,此时该文件对应的 etag 值就会发生变化,这时   If-None-Match的值和改变后的 etag 的值不相等,服务器就会发送一个新的文件内容给浏览器,同时返回改变后的 etag .
    • 注:etag码的生成和具体的服务器是有直接关联的,如果浏览器端前后两个http请求的接收端为不同的地址的服务器,此时返回的etag都是各自生成的不同的值,因此无法起到预期的缓存效果。

转载于:https://www.cnblogs.com/chtt/p/5862584.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值