Http缓存

强制缓存

强制缓存时,客户端会先从本地缓存里面找,找到了就判断缓存是否过期。

强制缓存主要是两个字段:Expires和Cache-Control

Expires

Expires标识缓存到期时间,是一个绝对时间,也就是说,他返回的是几几年几几月几几日几几时几几分几几秒,如果客户端从他的缓存的这个字段里面找到这个时间,发现这个时间过期了,那就会发起网络请求去获取数据。

但是他的缺点也很明显,由于这个时间是绝对时间,那我客户端修改了本地时间,这个缓存不就失效了嘛。

Cache-Control

为了解决Expires的问题,就引入了Cache-Control。Cache-Control代表了缓存的有效期,是一个相对时间,不管你客户端本地时间是什么,我只会返回给你一个有效期,相当于倒计时,只要这个倒计时到零了,你就给去获取缓存了。

对比缓存

对比缓存就是说他每次都会进行网络请求,只不过服务器会根据他的字段的数据判断他是否需要更新数据,如果需要,就把新数据返给客户端,如果不需要,就返回304状态码让客户端继续使用缓存。

Last-Modified和If-Modified-Since

Last-Modified是服务器返回给客户端的,这个字段规定了资源最后一次修改的时间。然后客户端在网络请求时就会将这个时间保存在If-Modified-Since这个字段里面去,然后服务器判断客户端传来的这个时间是否和他需要请求的资源的最后修改时间是否相等,如果相等,就证明资源没有被修改,返回304,客户端可以继续使用缓存;如果不相等,就证明资源被修改了,那就返回200状态码,并将新的资源发送给客户端。

由于这组关键字他的时间最低单位是秒,所以如果我有一个资源在1S内发生了多次的修改,那Last-Modified和If-Modified-Since这组关键字就没用了。

Etag和If-no-match

和Last-Modified和If-Modified-Since不一样的是,Etag和If-no-match直接使用标识符去代表了。在服务器给客户端发送数据时会带有Etag字段,里面存放着这个文件最后一次被修改后生成的标识符。然后当客户端需要进行网络请求的时候,他就会把Etag里面的关键字放到If-no-match中去,然后去网络请求,服务器会判断这个标识符和服务器现在这个资源的标识符是否相等,如果相等,就证明这个资源还没有被修改,缓存还可以使用,返回304;如果不相等,就证明资源发生了修改,客户端需要更新数据,就返回200以及新的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值