HTTP缓存

本文详细介绍了HTTP缓存中的强制缓存和协商缓存原理,包括它们的工作机制、实现流程以及Etag优先级的原因。重点讲解了如何通过Cache-Control和Expires字段控制缓存,以及If-Modified-Since和Etag在判断资源是否过期时的不同作用。
摘要由CSDN通过智能技术生成

为什么要使用缓存?

为了减少向服务器请求的量

强制缓存

强制缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存;决定是否使用缓存的主动性在于浏览器这边

强制缓存有两个字段:1.Cache_Control相对时间   2.Expries绝对时间

如果Http头部同时有这两个字段的话,Cach_Control优先级大于Expires;

实现流程:

1.浏览器第一次请求访问服务器资源时,服务器会在返回这个资源的同时,在Response(响应)头部加上Cache-Control中设置过期时间大小

2.浏览器再次请求访问服务器中资源时,会先通过请求资源的时间Cache-Control中设置的过期时间大小,来计算出该资源是否过期,如果没有,则使用该缓存,否则重新请求服务器

3.服务器再次收到响应后,会再次更新Respo头部的Cache-Control;

协商缓存

2024年4月15日

15:47

协商缓存基于强制缓存;在强制缓存到期后生效;

第一种情况:

基于时间:

1.请求头部中的If-Modified-Since字段与响应头中的Last-Modified字段实现;

响应头部中的Last-Modified:表示这个响应资源的最后修改时间;

请求头部字段If-Modified-Since:当资源过期了,发现响应头中有Last-Modified声明,则再次发起请求的时候带上Last-Modified的时间,服务器收到请求后发现有If-Modified-Since则与被请求资源的最后修改时间进行对比,如果最后修改时间较新,说明资源被修改过;则返回最新资源HTTP 200 OK;如果最后修改时间较旧,说明资源无新修改,响应HTTP 304 缓存

第二种情况:

基于一个唯一标识:

请求头部中的If-Modified-Since字段与响应头部中的Last-Modified字段实现:

响应头部中的Last-Modified:表示这个响应资源最后的修改时间;

请求头部中的If-Modified-Since:当资源过期了,发现响应头中具有Etag声明,则再次向服务器发起请求,会将请求头If-None-Match值设置为Etag的值,服务器收到请求后进行对比,如果资源没有变化则返回304,如果资源变化了返回200;

第一种方式基于时间,第二张方式基于一个唯一标识实现,相对来说后者可以更加准确的判断文件内容是否被修改,避免由于时间篡改导致的不可靠问题

如果在第一次请求资源时,服务端返回的HTTP响应头同时有Etag和Last-Modified字段,那么客户端再下一次请求的时候,如果带上了ETag和Last-Modified字段信息给服务器,这时Etag优先级更高,也就是服务器会先判断ETag是否变化了,如果ETag有变化就不用再判断Last-Modified了,如果Etag没有变化,然后再看Last-Modified;

为什么EYag优先级更高?

1.在没有修改文件内容的情况下文件的最后修改时间可能也会改变,这会导致客户端认为这个文件被改动了,而重新请求;

2.可能有些文件在秒级以内修改的,If-Modified-Since能检查的粒度是秒级的,使用ETag就能保证这种需求下客户端在1秒内能刷新多次;

3.有些服务器不能精确获取文件的最后修改时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值