HTTP缓存

版权声明:有些文章写的很随意,那是仅作为个人记录的文章,建议直接关掉,多看一秒亏一秒 https://blog.csdn.net/qq_36523667/article/details/79948498

学习自

https://www.cnblogs.com/chenqf/p/6386163.html


强制缓存

如何判断缓存数据是否失效?

Expires

服务器给你一个到期时间,客户端进行比对。但是有个问题,两端时间不同步。是HTTP1.0的过时产物。

Cache-Control(这个东西出现在request中还是response中颇有争议,一个问题就是,response header中指定了max age, request header中也指定了max age,有啥区别?其实response header返回了max age,就是这段时间内是可以复用缓存的。 它的沟通对象其实是我们的缓存系统。当我们再次请求的时候,我们不需要在request header中设置cache control,就可以进行 判断。如果我们在request header中就算设置了max-age呢?这个是我们想废掉这个事件段内的缓存可以做的操作。因为我们默认在max-age内就可以进行缓存的复用,但是我们客户端检测到缓存对于实际需求来说已经是有问题了,这个时候我们需要手动 指定max-age。如果max-age>0,那就是代表我们可以接受过期多久的缓存,如果max-age<=0,就是代表我们需要正式 请求服务器了,进入对比缓存阶段)

为了解决上面的弊端,需要指明max-age,代表多少时间内是可以复用的。

常见取值:

private:             客户端可以缓存(默认)
public:              客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)
max-age=xxx:   缓存的内容将在 xxx 秒后失效
no-cache:          需要使用对比缓存来验证缓存数据(后面介绍)
no-store:           所有内容都不会缓存,强制缓存对比缓存都不会触发(对于前端开发来说,缓存越多越好,so...基本上和它说886)


对比缓存

服务端会给你一个标识,你再次请求的时候,会带着标识,然后服务端进行检查,看看是否可以复用缓存。如果可以,返回304状态码,我们可以复用缓存。和强制缓存不同之处在于,这里的比对,发生在服务端中。


response header中Last-Modified

资源最后修改时间

request header中If-Modified-Since

给服务器这个时间,如果修改过,返回200,成功请求;如果没有修改过,返回304,可以直接用缓存


response header的ETag

服务器返回资源的唯一标识

request header的If-None-Match

判断资源改变了没,和上面的修改时间原理一样,只是前者比较的是修改时间,这里是比较的是资源


当客户端没有缓存时,是这样请求的



当客户端有缓存时,是这样请求的(没过期,就是强制缓存,过期了,再进行一个比较缓存)


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页