美文网首页
强缓存与协商缓存

强缓存与协商缓存

作者: 喵喵_c938 | 来源:发表于2020-04-03 10:31 被阅读0次

一、强缓存

当浏览器请求某个资源时,服务端会在response header中对此资源做缓存配置,缓存的时间和类型都由服务端配置。
response header的cache-control,常见的设置有max-age,public,immutable.private,no-cache,no-store
如下图cache-controle的设置,其中:
max-age表示缓存的时间是315360000秒(10年);
public表示可被客户端或者代理服务(nginx)器缓存(与其对应的是private,只可以被客户端缓存);
immutable表示资源在设定的时间内永远不变,即使刷新浏览器也不会重新请求该资源(相反如果没此属性,当用户刷新页面时,会重新发送请求,获取该资源,这就是额外的请求消耗了)


image.png

1、cache-control: max-age=xxxx,public
客户端和代理服务器都可以缓存该资源;
客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,如果用户做了刷新操作,就向服务器发起http请求

2、cache-control: max-age=xxxx,private
只让客户端可以缓存该资源;代理服务器不缓存
客户端在xxx秒内直接读取缓存,statu code:200

3、cache-control: max-age=xxxx,immutable
客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,即使用户做了刷新操作,也不向服务器发起http请求

4、cache-control: no-cache
跳过设置强缓存,但是不妨碍设置协商缓存;一般如果你做了强缓存,只有在强缓存失效了才走协商缓存的,设置了no-cache就不会走强缓存了,每次请求都回询问服务端。

5、cache-control: no-store
不缓存,这个会让客户端、服务器都不缓存,也就没有所谓的强缓存、协商缓存了。

二、协商缓存

某天客户端发现资源过期,需要重新请求服务器,这时请求的过程就可以设置协商缓存。
协商缓存的设置:
response header :
etag:5c20abbd-e2e8(文件的唯一标识,就是文件的hash)
last-modified:Mon, 24 Dec 2018 09:49:49 GMT(文件的最近更新时间,精确到秒)
流程:


image.png

注意:response header中的etag、last-modified在客户端重新向服务端发起请求时,会在request header中换个key名:
response header(request header):
etag(if-none-matched)
last-modified(if-modified-since)

为什么要有etag?

你可能会觉得使用last-modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要etag呢?HTTP1.1中etag的出现(也就是说,etag是新增的,为了解决之前只有If-Modified的缺点)主要是为了解决几个last-modified比较难解决的问题:
1、一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新get;
2、某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),if-modified-since能检查到的粒度是秒级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒);
3、某些服务器不能精确的得到文件的最后修改时间。

参考文章:https://www.jianshu.com/p/9c95db596df5

相关文章

  • 浏览器缓存

    强缓存和协商缓存:强缓存优先于协商缓存进行;协商缓存失效,返回200,重新返回资源和缓存标志;协商缓存生效,返回3...

  • 了解一下浏览器的协商缓存以及nginx如何配置

    强缓存与协商缓存的区别 强缓存:浏览器不与服务端协商直接取浏览器缓存协商缓存:浏览器会先向服务器确认资源的有效性后...

  • 缓存

    强,协商缓存参考 缓存分为两种:强缓存和协商缓存,根据响应的header内容来决定。 强缓存相关字段有expire...

  • 强缓存与协商缓存

    一、强缓存 当浏览器请求某个资源时,服务端会在response header中对此资源做缓存配置,缓存的时间和类型...

  • 强缓存与协商缓存

    什么是强缓存,协商缓存? 强缓存强缓存不会像服务器发送请求,直接从缓存中读取资源,状态码为 200,通过设置 ex...

  • 前端缓存--强缓存与协商缓存

    一、概述 良好的缓存策略可以降低资源的重复加载提高网页的整体加载速度通常浏览器缓存策略分为两种:强缓存和协商缓存 ...

  • 协商缓存和强缓存的区别

    协商缓存和强缓存的区别(1)强缓存使用强缓存策略时,如果缓存资源有效,则直接使用缓存资源,不必再向服务器发起请求。...

  • HTTP - 强缓存与协商缓存

    何时使用强缓存?何时使用协商缓存? 在第一次请求时,浏览器获得Expires和Cache-Control信息。 在...

  • 聊聊强缓存与协商缓存

    本文已参与低调务实优秀中国好青年前端社群的写作活动 浏览器缓存机制 我们都知道当我们在浏览器中打开一个页面时,浏览...

  • 协商缓存和强缓存

    浏览器缓存主要有两类:缓存协商和彻底缓存,也有称之为协商缓存和强缓存 浏览器缓存机制浏览器缓存(Brower Ca...

网友评论

      本文标题:强缓存与协商缓存

      本文链接:https://www.haomeiwen.com/subject/advcphtx.html