Web缓存

参考

【Web缓存机制系列】2 – Web浏览器的缓存机制
浏览器缓存机制剖析


一张图说清缓存

这里写图片描述


什么是web缓存

web缓存是存在于客户端和服务端之间的资源,当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。


为什么要用web缓存

  1. 降低了带宽。若每次都要重新向服务器去请求,那么就会浪费大量的带宽。但是有了web缓存,只会只用到少量的网络流量。
  2. 降低了服务器的压力。服务器处理多请求很可能会忙不过来,web缓存可以减少这种重复请求。
  3. 更快的反应时间。从web缓存中拿我们需要的资源往往比重新向服务器请求并下载更快。

缓存类型

  • 数据库缓存
    Web应用,特别是SNS类型的应用,往往关系比较复杂,数据库表繁多,如果频繁进行数据库查询,很容易导致数据库不堪重荷。为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提供响应效率。

  • 服务器端缓存
    代理服务器用于代表初始Web服务器满足Http请求的网络实体。代理服务器上保存着最近请求过的对象的拷贝,用户可以配置自己的浏览器,使其所有请求指向代理服务器。
    请求对象时可能发生:

    1. 浏览器向代理服务器发送一个http请求
    2. 代理服务器会先查看是否有该对象的拷贝,如果有,代理服务器会返回一个响应报文并返回该对象。
    3. 如果没有拷贝,那么代理服务器会打开一个TCP连接,向初始服务器去请求。
    4. 代理服务器收到该对象,存储一份拷贝再发送一份相应报文给客户端。
  • 浏览器缓存
    浏览器缓存根据一套与服务器约定的规则进行工作,在同一个会话过程中会检查一次并确定缓存的副本足够新。如果你浏览过程中,比如前进或后退,访问到同一个图片,这些图片可以从浏览器缓存中调出而即时显现。


浏览器端的缓存规则

对于浏览器端的缓存来讲,这些规则是在HTTP协议头和HTML页面的Meta标签中定义的。他们分别从新鲜度和校验值两个维度来规定浏览器是否可以直接使用缓存中的副本,还是需要去源服务器获取更新的版本。
1. 新鲜度:
根据包含过期信息的报头,并保证尚未过期。
浏览器已经使用过这个缓存副本,并且在一个会话中已经检查过新鲜度(?)
2. 校验值:
服务器在返回资源时带有Etag信息,如果服务器发现客户端传来的Etag信息与其现在的资源匹配,则不需要再次获取资源直接到缓存里取得。否则,需要重新获取资源。


浏览器的缓存控制

HTTP缓存报头
cache-control与Expires

cache-control
Expires
可以看到,cache-control和expires都是设置缓存的有效时长。但是cache-control的优先级要高于expires

Last-Modified与ETag

Last-Modified
Last-Modified主要是为了让服务器判断资源最后被修改的时间与当前传入的时间是否一致,一致的话就会返回304。
那这样为什么还需要Etag呢?
1. Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的新鲜度
2. 如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存
而ETag呢会根据内容生成,这样就不需要担心2的问题了。ETag的优先级高于Last-Modified,因此服务器会首先判断Etag再去判断Last-Modified,最后决定是否返回304

Cache-control与Expires vs Last-Modified与Etag

如果检测到本地的缓存还是有效的时间范围内,浏览器直接使用本地副本,不会发送任何请求。两者一起使用时,Cache-Control/Expires的优先级要高于Last-Modified/ETag。即当本地副本根据Cache-Control/Expires发现还在有效期内时,则不会再次发送请求去服务器询问修改时间(Last-Modified)或实体标识(Etag)了。

用户操作行为与缓存关系

这里写图片描述


无法被缓存的请求有哪些

  1. HTTP信息头中包含Cache-Control:no-cache,pragma:no-cache,或Cache-Control:max-age=0等告诉浏览器不用缓存的请求
  2. POST请求无法被缓存
  3. HTTP响应头中不包含Last-Modified/Etag,也不包含Cache-Control/Expires的请求无法被缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值