Etag和if-None-Match

本文介绍了HTTP缓存中Etag和if-None-Match的工作原理,阐述了它们如何帮助减少服务器带宽使用,通过浏览器缓存控制减少不必要的资源传输。当浏览器请求资源时,服务器返回Etag,浏览器后续请求会带上此Etag,服务器通过比较判断资源是否更新,从而决定返回200响应还是304未修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在跟后台对接口时,发现请求同一个接口时总是一次成功一次失败这样间隔着来,很是困扰。请求失败的时候报的错时502 Not Modified,这个报错也是百思不得解。在我掌握的知识里502时服务器错误,而Not Modified对应的状态码应该时304,但这样的报错提示是从来没有遇到过。另外这个错误也只是在本地跑的时候会有,放到线上的环境就很正常,第二次请求时也是304而不会报错。得闲我比较了本地两次调接口时的请求头,发现第二次也就是请求失败的时候请求头多了一个字段If-None-Match,然后禁用了缓存,果然就不会有报错了,所以我猜想可能是后台没有对缓存做处理吧。然后我去查阅资料学习了下请求头ETagIf-Not-Match.

原理

它的原理是这样的,当浏览器请求服务器的某项资源(A)时, 服务器根据A算出一个哈希值(3f80f-1b6-3e1cb03b)并通过 ETag 返回给浏览器,浏览器把"3f80f-1b6-3e1cb03b" 和 A 同时缓存在本地,当下次再次向服务器请求A时,会通过类似 If-None-Match: "3f80f-1b6-3e1cb03b" 的请求头把ETag发送给服务器,服务器再次计算A的哈希值并和浏览器返回的值做比较,如果发现A发生了变化就把A返回给浏览器(200),如果发现A没有变化就给浏览器返回一个304未修改。这样通过控制浏览器端的缓存,可以节省服务器的带宽,因为服务器不需要每次都把全量数据返回给客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值