http-web缓存

缓存

web缓存可以自动保存常见的文档副本的Http设备,当web请求到达时,如果本地已有缓存副本,则直接响应。
下面会解释http如何保持副本的新鲜度,以及缓存和服务器通信的问题。
  1. 冗余数据传输就
  2. 带宽瓶颈: 一般局域网带宽都比较高,城域网带宽较低,如果可以在局域网设置缓存,则可以很快的响应用户。
  3. 瞬间拥塞 可以防止突发事件,瞬间挤爆服务器,产生在哪。
  4. 距离时延
  5. 命中和未命中
    缓存要检查副本是不是服务器上最新的,称之为新鲜度检查。

Http提供了几个用来已缓存对象进行在验证的工具

  • If-Modified-Since 首部
  • 在验证命中
  • 在验证未命中 服务器会返回一个最新的对象
  • 对象被删除 缓存也将删除对象

缓存命中率

中等规模来说,40%就已经可以了。这是指客户端请求被缓存响应的频率。字节命中率,就是缓存传送的字节占
总字节的百分比。

区分命中和未命中的情况

可以使用Date首部和Age首部来判断响应是来自缓存还是原服务器。

私有缓存

web浏览器中有内建的私有缓存,大多数浏览器会将常用的文档,缓存到个人电脑的磁盘或者内存中。
还可以查看缓存内容和过期时间。

共有代理缓存

这是缓存代理服务器,被称为代理缓存。可以提供给多个用户访问。

代理缓存的层次结构

可以使用多级缓存,在靠近客户端的地方使用小的廉价的缓存,更高层次,采用更大的,功能更强的缓存。

缓存的处理步骤

  1. 接收
  2. 解析
  3. 查询 – 查询在本地缓存副本,是否存在请求的资源,已缓存的对象还会有一些元信息,包括对象在缓存存在了多少时间,被使用了多少次。
  4. 新鲜度检测 http缓存将服务器文档保留一段时间,这段时间里,都认为文档时新鲜的,再不联系服务器的情况下,直接提供给客户端。一旦文档停留了过长的时间,在提供该文档之前,缓存要进行在验证。客户端发送给缓存的请求首部都可以强制缓存进行在验证,或者完全避免炎症。
  5. 创建响应 缓存会向客户端的响应中插入新鲜度信息(cache-control,Age,Expires首部),缓存不应该调整Date首部,Date首部表示原始服务器最初产生的这个对象的日期。
  6. 发送
  7. 日志

保持副本的新鲜

通过Cache-Control首部和Expires首部,http让原始服务器向每个文档附加一个过期时间。过期之前,可以无限制
的使用缓存副本,除非客户端请求中包含了,阻止提供已缓存或者未验证的资源首部。
  1. 过期时间和试用期 Cache-Control:max-age: 这个值定义了从文档产生到不再新鲜为止,最大的合法生存时间。以秒为单位。Expires:指定了一个绝对的过期日期,GMT时间。
  2. 服务器再验证 如果仅仅是缓存时间到期了,并不能意味着,文档一定产生了变化。这称之为服务器再验证,可以通过下面的条件验证方法进行验证。
  3. 条件验证方法再验证 http允许缓存向服务器发送一个条件get,只有当文档与缓存中的不同时,才回送对象主体。提供了5个条件请求首部,最常用的2个:If-Modified-Since,If-None-Match。
  4. If-Modified-Since:Date 如果自指定日期后,文档被修改了,get就会执行,携带新首部的新文档才会被返回给缓存,新首部除了其他内容外,还有一个新的过期时间。如果没有过期,会返回一个304码,一般还会重新返回一个新的过期时间。
  5. If-None-Match 实体标签再验证 使用这个首部,一般有以下几个原因:有些文档可能被周期性的修改,内容虽然没变,但是修改时间变了。2.有些文档修改了,但是所作修改并不重要,不需要全世界的缓存都重装数据。为了解决这些问题,http允许用户使用被称为‘实体标签’的版本标识符。如果实体标签,不再匹配,就会返回新的内容和新的标签(Etag)。
  6. 强弱验证器 弱验证器,只有在内容发生很大变化时,才会变化。
  7. 什么时候使用实体标签和最后修改日期 如果服务器返回了实体标签,就可以使用标签验证器,如果返回了Last-Modified值,客户端就可以使用If-Modified-Since。如果都提供了,就可以使用这二种。http1.1最好应该发送一个实体标签,还有最后修改时间。

控制缓存的能力

http定义了几种方式来指定文档过期之前,可以将其缓存多长时间。Cache-Control:no-store,no-cache,
must-revalidate,max-age,附件一个Expires日期到首部中去。还可以不附加过期时间,让缓存自己
确定过期时间。

1. no-store 禁止对响应进行复制,会像非缓存代理一样,转发完响应后,删除对象。
2. no-cache 响应可以存储在本地缓存。只有在与原服务器进行了新鲜度再验证后,在允许给客户端使用。
3. max-age 文档从服务器传过来之时起,被认为有效的秒数。如果被设置为0,每次访问的时候都要刷新。
4. Expires首部 不推荐使用这个,因为很多服务器时钟设置都不同步,或者不正确。
5. must-revalidate 在没有进行服务器再验证的情况下,不能提供给客户端服务。
6. 试探性过期 缓存自己计算出一个最大有效时间。
7. 客户端的新鲜度限制 web浏览器,刷新或者重载按钮时,一般都会发布一个附加cache-control首部url请求。强制缓存进行再验证。

猜你喜欢

转载自blog.csdn.net/liang0000zai/article/details/51352099
今日推荐