Да, согласен с вами.В идеале кэшируемые ответы должны выбираться на основе кода состояния.Я только что создал запрос на улучшение функции .
Однако, это уже поддерживается во время выполнения, только пользовательский интерфейс пропускает его.
Так что вы можете сделать это, изменив файл конфигурации.
Для этого откройте repository/resources/api_templates/velocity_template.xml
и найдите <cache scope="per-host" collector="false"
.(Примечание collector=false
)
Затем добавьте тег <protocol>
чуть выше тега <implementation>
следующим образом.
<cache scope="per-host" collector="false" hashGenerator="org.wso2.carbon.mediator.cache.digest.REQUESTHASHGenerator" timeout="$!responseCacheTimeOut">
<protocol type="HTTP">
<methods>*</methods>
<headersToExcludeInHash/>
<responseCodes>2[0-9][0-0]</responseCodes>
<enableCacheControl>false</enableCacheControl>
<includeAgeHeader>false</includeAgeHeader>
<hashGenerator>org.wso2.carbon.mediator.cache.digest.REQUESTHASHGenerator</hashGenerator>
</protocol>
<implementation type="memory" maxSize="500"/>
</cache>
Обратите внимание на регулярное выражение для ответов 2xx в responseCodes
.Я надеюсь, что это ответит на ваш 1-й вопрос.
Что касается ключевых кешей, то да, есть и кеши на шлюзе и на менеджере ключей.Но по умолчанию включен только кеш шлюза.
<CacheConfigurations>
<!-- Enable/Disable token caching at the Gateway-->
<EnableGatewayTokenCache>true</EnableGatewayTokenCache>
<!-- Enable/Disable API resource caching at the Gateway-->
<EnableGatewayResourceCache>true</EnableGatewayResourceCache>
<!-- Enable/Disable API key validation information caching at key-management server -->
<EnableKeyManagerTokenCache>false</EnableKeyManagerTokenCache>
И есть случаи, когда некоторые хотят отключить кэш шлюза и включить кэш менеджера ключей, например, когда шлюз находится в DMZ.