Управление API Microsoft Azure - политика кеширования не работает

Я попытался установить политику кэширования в Azure API Management следующим образом:

<policies>
    <inbound>
        <base />
        <cache-lookup vary-by-developer="false" vary-by-developer-groups="false" must-revalidate="true" downstream-caching-type="none" caching-type="internal">
            <vary-by-query-parameter>KontoNr</vary-by-query-parameter>
        </cache-lookup>
        <set-backend-service id="apim-generated-policy" backend-id="LogicApp_GeldEinzahlen_APIM_f597e3433e7847cb9d689c3f95bf1d6d" />
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://login.microsoftonline.com/1b7c4ba5-7701-49e7-94d8-5ddbc87f8b6e/v2.0/.well-known/openid-configuration" />
            <required-claims>
                <claim name="aud">
                    <value>7068cdb6-0e5c-49c5-aaa8-ec8fc941de22</value>
                </claim>
            </required-claims>
        </validate-jwt>
        <set-variable name="isKontoNr" value="@(context.Request.MatchedParameters["kontoNr"].ToString().Length != 10)" />
        <choose>
            <when condition="@(context.Variables.GetValueOrDefault<bool>("isKontoNr"))">
                <return-response>
                    <set-status code="400" reason="Bad Request" />
                    <set-header name="WWW-Request" exists-action="override">
                        <value>Generell error="kontoNr invalid"</value>
                    </set-header>
                </return-response>
            </when>
        </choose>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
        <cache-store duration="1000" />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

У меня есть разработчик ценового уровня, поэтому внутренний кеш должен быть доступен, но если я сделаю запрос, я всегда получу следующий ответ:

HTTP/1.1 200 OK

cache-control: no-cache
content-encoding: gzip
content-type: text/plain; charset=utf-8
date: Tue, 12 Jan 2021 15:54:26 GMT
expires: -1
pragma: no-cache
strict-transport-security: max-age=31536000; includeSubDomains

cache-control всегда «no-cache», независимо от того, что я отправляю в заголовке.

Как я могу это исправить? Требуется ли какая-то другая конфигурация или я что-то включил?


person Pascal Fischer    schedule 12.01.2021    source источник
comment
прагма no-cache на самом деле не должна указывать на то, использовался ли кеш. Перейдите на страницу тестирования в APIM, запустите запрос и посмотрите следы. Там вы увидите, использовался ли поиск в кеше   -  person silent    schedule 12.01.2021
comment
Привет, Паскаль, если ответ, который я дал ниже, помогает в вашем вопросе, не могли бы вы отметьте (нажмите на галочку рядом с моим ответом, чтобы переключить его с серого на заполненный) как принято, заранее спасибо.   -  person Hury Shen    schedule 19.01.2021


Ответы (1)


Как сказано в комментариях, сообщение cache-control: no-cache не должно указывать на то, использовался ли кеш. Политика <cache-lookup> в вашем APIM верна.

При первом запросе API (для тестирования на странице APIM) нажмите Трассировка - ›Входящие. Вы можете найти сообщение Cache lookup resulted in a miss, потому что при первом запросе нет кеша. введите описание изображения здесь

Затем нажмите Исходящие, вы увидите Response will be buffered during streaming and stored in the cache after it is received in full. введите описание изображения здесь

Затем, поскольку вы указали, что кеш будет храниться в течение 1000 секунд, поэтому при повторном запросе через 1000 секунд вы можете найти сообщение Cache lookup resulted in a hit! в разделе Входящие. введите описание изображения здесь

Пожалуйста, проверьте на своей стороне, и если результат совпадает с тем, что я упомянул выше, политика <cache-lookup> отлично работает в вашем APIM.

person Hury Shen    schedule 13.01.2021
comment
Спасибо. Я обнаружил, что кеширование по умолчанию не включено для запросов с заголовком авторизации. Разрешение кеширования личных ответов решило эту проблему. - person Tiamo Idzenga; 16.02.2021