尽管响应中包含“ no-cache”标头,但仍缓存HTTP响应

时间:2019-06-12 14:17:12

标签: rest http caching https cache-control

我的后端正在向第三方REST API发出请求。我希望缓存请求以避免达到其速率限制。但是,第三方API返回的标头指示我的缓存层(符合RFC 7234)不进行缓存。是否有任何符合标准的方法来指示我的缓存层忽略响应中提供的指令?

我的后端在Node.js中,而我尝试过的缓存层是cacheable-request。我正在使用Cache-Control: public, max-stale=900标头发出请求,目的是允许将过时的数据提供15分钟。如果我调用一个不返回与缓存相关的响应头的API,则此方法有效。但是,真正的第三方API返回以下标头:

cache-control: no-store, no-cache, must-revalidate
expires: Thu, 01 Jan 1970 00:00:00 UTC
date: Wed, 12 Jun 2019 13:53:07 GMT
pragma: no-cache
vary: Accept-Encoding

这似乎阻止了我的缓存层启动。

该解决方案需要冗余并且可以在Kubernetes中部署。我可以提供陈旧的数据,只要我能在用户进行任何突变或收到第三方的事件挂钩时使它们失效即可。我希望找到一个相当通用的解决方案,不需要我在自己的后端中真正复制并保留第三方数据结构。

1 个答案:

答案 0 :(得分:0)

由于cacheable-request接受任何http.request API兼容方法,因此您可以制作自己的http.request兼容方法,剥离cache-control标头,然后将该方法包装在{{1}中}。

示例代码如下:

cacheable-request