[英]Azure API Management caching policy
在我的 Azure API 管理中,我在 API 级别定义了一个基于标头的缓存策略。 政策很简单:
<policies>
<inbound>
<check-header name="token" failed-check-httpcode="400" failed-check-error-message="Token header is missing" ignore-case="true" />
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="none">
<vary-by-header>token</vary-by-header>
</cache-lookup>
<base />
</inbound>
<backend>
<forward-request />
</backend>
<outbound>
<cache-store duration="3600" />
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
在我的下游返回带有正文的 200 的情况下,这可以正常工作 - 具有相同标头令牌的下一个请求将命中缓存,并且响应将从 API 管理缓存返回。
但是,下游返回了一个错误代码(例如:401 Unauthorized),该响应没有被 API 管理缓存(通过我在 API 管理上启用的跟踪确认)。 我的印象是整个响应都被缓存了,但事实并非如此......
有人可以让我知道是否也可以在 http 代码不成功的情况下缓存响应,如果是,请指出一些文档 - 我昨天一直在谷歌上搜索一整天,但找不到更多。
提前致谢!
这是设计使然。 如果您查看跟踪,您应该会看到消息“后端服务响应状态代码为 401 而不是 200 OK。未应用缓存存储策略。” 理由是在 APIM 级别我们假设非 200 响应比 200 更瞬态。
假设客户端得到 401,继续执行任何操作以确保允许令牌执行操作并重试调用。 并且仍然从缓存中获取 401 直到缓存过期。
这当然可以作为策略的额外配置选项添加: http : //aka.ms/apimwish
您可以通过使用 cache-lookup-value 和 cache-store-value 来解决这个问题。 即在出站部分,如果您使用 cache-store-value 将一些值存储在缓存中,以使用令牌进行 401 存储。 并在缓存查找之前的入站中使用令牌执行缓存查找值,看看您是否获得了较早存储的值。 如果您这样做,您可以立即生成 401 响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.