如何根据返回的 etag 使用 curl 缓存 api 响应?

Posted

技术标签:

【中文标题】如何根据返回的 etag 使用 curl 缓存 api 响应?【英文标题】:How to cache api response using curl, based on returned etag? 【发布时间】:2013-06-12 09:00:38 【问题描述】:

这是一个简单的问题,可能对其他人也有帮助。 我有一个休息服务,它将为其端点上的每个 GET 查询返回一个正确的 ETAG 标头。 现在,我还需要创建一个 curl http 客户端来查询这些端点并使用 etag。 据我了解,在使用 curl 发出第一个请求后,我需要保存返回的 etag 以供以后使用,这样就可以 所有后续请求(直到 etag 在服务器上失效)我使用缓存版本,因为服务器将返回 304 标头和空响应。 它是否正确?

记住这个 http 客户端将分布在许多服务器上,并且 curl 本身无法保存返回的 内容我假设我需要使用 sqlite 或 fs 缓存之类的东西自己保存它。 它是否正确?

基本上我想的工作流程是这样的: 1. 向服务器端点发出第一个 curl 请求 (GET) 2. 服务器返回带有正确 etag 和内容的 http 代码 200 3. 使用我从服务器获得的此响应,使用 sqlite 或 fs 保存内容和 etag 4. 下次调用同一个端点,发送一个带有 etag 值的 If-None-Match 头 5. 服务器验证 If-None-Match 标头 5.a - 内容没有被改变,一个 304 头被发回并且没有响应。基于此,我从 sqlite 或 fs 加载本地缓存的内容。 5.b - 内容已更改,发回 200 标头以及新的 etag。基于此,我保存新的 etag 和内容以供下次使用。 6.循环重复

这对吗?

【问题讨论】:

【参考方案1】:

我会说是的,基于最近的事件和自己对这个问题的思考。

去做吧,如果有的话,它可能对你有用,你会很开心。

【讨论】:

以上是关于如何根据返回的 etag 使用 curl 缓存 api 响应?的主要内容,如果未能解决你的问题,请参考以下文章

缓存验证Last-Modifie和Etag的使用

AFN使用etag进行网络缓存

缓存验证Last-Modified和Etag的使用

使用ETag协议实现ASP.NET Core API缓存

利用ETag缓存优化请求

Youtube API V3 和 Etag