HTTP If-Modified-Since 请求头的作用:缓存校验

If-Modified-Since

If-Modified-Since是HTTP客户端的标准请求头,用来发送给服务器,HTTP服务器端根据If-Modified-Since的值来判断是否要返回最新的响应。服务端200会响应返回Last-Modified来标记最新的修改时间。

第一次请求

1
第一次请求后,浏览器会把响应文件缓存住。

第二次请求

1
第二次请求前,在浏览器请求头里加上If-Modified-Since,If-Modified-Since值也跟Last-Modified值一致,服务端会响应304,并且不会发送文件内容,节约了网络流量。

第三次请求

1
这次请求我们修改了If-Modified-Since,同Last-Modified不一致,服务端响应200,发送最新的文件内容。
1

etag

If-Modified-Since是以修改时间来校验的,如果文件修改时间变了,内容未变的情况,我们可以用etag来处理。etag会生成一个与文件内容相关的字符串,类似哈希校验。客户端浏览器通过If-None-Match或If-Match设置该值。
If-None-Match:告诉服务器如果一致,返回状态码304,不一致则返回资源。
If-Match:告诉服务器如果不一致,返回状态码412。

从状态码的角度来看

1

cache-control的各个值关系

1

缓存头部对比

头部优势和特点劣势和问题
Expires1、HTTP 1.0 产物,可以在HTTP 1.0和1.1中使用,简单易用。
2、以时刻标识失效时间。
1、时间是由服务器发送的(UTC),如果服务器时间和客户端时间存在不一致,可能会出现问题。
2、存在版本问题,到期之前的修改客户端是不可知的。
Cache-Control1、HTTP 1.1 产物,以时间间隔标识失效时间,解决了Expires服务器和客户端相对时间的问题。
2、比Expires多了很多选项设置。
1、HTTP 1.1 才有的内容,不适用于HTTP 1.0 。
2、存在版本问题,到期之前的修改客户端是不可知的。
Last-Modified1、不存在版本问题,每次请求都会去服务器进行校验。服务器对比最后修改时间如果相同则返回304,不同返回200以及资源内容。1、只要资源修改,无论内容是否发生实质性的变化,都会将该资源返回客户端。例如周期性重写,这种情况下该资源包含的数据实际上一样的。
2、以时刻作为标识,无法识别一秒内进行多次修改的情况。
3、某些服务器不能精确的得到文件的最后修改时间。
ETag1、可以更加精确的判断资源是否被修改,可以识别一秒内多次修改的情况。
2、不存在版本问题,每次请求都回去服务器进行校验。
1、计算ETag值需要性能损耗。
2、分布式服务器存储的情况下,计算ETag的算法如果不一样,会导致浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时发现ETag不匹配的情况。

总结

缓存开关是: pragma、cache-control。
缓存校验有:Expires、Last-Modified、etag。

参考

https://blog.csdn.net/u012375924/article/details/82806617
https://imweb.io/topic/5795dcb6fb312541492eda8c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龙在山东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值