繁体   English   中英

Azure API 管理缓存策略

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM