HTTP 协商缓存 ETag、If-None-Match

(1)浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在respone header加上ETag。

ETag是服务器根据当前请求的资源生成的一个唯一标识。

这个唯一标识是一个字符串,只要资源有变化这个串就不同,跟最后修改时间没有关系。

(2)浏览器再次跟服务器请求这个资源时,在request header上加上If-None-Match(值就是上一次请求时返回的ETag的值)。

(3)服务器再次收到资源请求时,根据浏览器传过来If-None-Match和然后再根据资源生成一个新的ETag,如果这两个值相同就说明资源没有变化,否则就是有变化; 如果没有变化则返回304 Not Modified,但是不会返回资源内容; 如果有变化,就正常返回资源内容。 与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时,由于ETag重新生成过,response header中还会把这个ETag返回,即使这个ETag跟之前的没有变化。

如上例中所示,在使用了If-None-Match之后,服务器只需要很小的响应就可以达到相同的结果,从而优化了性能。

复制代码
协商缓存需要配合强缓存使用.
如上图,有强缓存的相关Cache-Control,因为如果不启用强缓存的话,协商缓存根本没有意义。
相关推荐
Patrick_Wilson2 小时前
RPC 与 REST 的本质区别看这一篇就够了:别再只看 URL 里有没有动词
http·rpc·restful
秋田君5 小时前
QT_HTTP协议编程
qt·http·iphone
Loongproxy6 小时前
抖音企业号更换公司主体怎么操作?矩阵账号配静态长效IP的稳定方案
服务器·网络·网络协议·tcp/ip
影寂ldy6 小时前
C# UDP+串口Modbus转发网关
单片机·网络协议·udp
北冥you鱼8 小时前
HTTPS 推送失败?改用 SSH 一键搞定
网络协议·https·ssh
2401_8685347814 小时前
指令集-最常用 Linux 命令速查手册(整合版)
linux·网络协议
dog25016 小时前
再论 TCP 的流式传输
网络·网络协议·tcp/ip
喜欢吃燃面19 小时前
HTTP协议深度解析:从请求响应到状态管理与安全传输
linux·网络协议·学习
傻啦嘿哟20 小时前
某宝商品爬虫:破解反爬的终极方案(含IP代理池+User-Agent轮换)
爬虫·网络协议·tcp/ip
tyung1 天前
znet 数据编解码:字节流怎么变成消息
后端·网络协议·go