频道栏目
首页 > 资讯 > 网络协议 > 正文

HTTP缓存:强制缓存、如何判断缓存数据是否失效?

18-04-16        来源:[db:作者]  
收藏   我要投稿

强制缓存

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

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

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

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

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

相关TAG标签
上一篇:分享服务器性能优化的8种常用方法
下一篇:python的深拷贝与浅拷贝实例讲解
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站