Vous consultez la documentation d'Apigee Edge.
Consultez la
documentation Apigee X. en savoir plus
Cette rubrique décrit comment Edge gère les en-têtes HTTP/1.1 de mise en cache lorsque vous utilisez la stratégie ResponseCache. Apigee Edge est actuellement compatible avec un sous-ensemble des en-têtes et des directives de mise en cache HTTP/1.1 (les fonctionnalités non compatibles sont répertoriées dans cette rubrique) reçus des serveurs cibles (origine) backend.
De plus, avec certains en-têtes, Edge effectue des actions en fonction de ses directives. Dans certains cas, ces en-têtes de mise en cache HTTP/1.1 remplacent le comportement spécifié dans la règle ResponseCache.
Par exemple, si l'en-tête Cache-Control
est renvoyé par un serveur backend, vous pouvez demander à la directive s-maxage
de l'en-tête de remplacer d'autres paramètres d'expiration dans la règle.
En-tête | Assistance |
---|---|
Cache-Control | Compatible avec les réponses renvoyées par les serveurs d'origine backend, mais pas avec les requêtes client. Edge prend en charge un sous-ensemble de directives. |
Expiration | Compatible Peut être ignoré |
Tags d'entité (ETags) | Comportement spécifique pour If-Match et If-None-Match. |
If-Modified-Since | Pour les requêtes GET, l'en-tête est transmis au serveur d'origine même si une entrée de cache valide existe. |
Accept-Encoding | Edge envoie des réponses compressées ou non compressées en fonction des en-têtes entrants. |
Cache-Control
Apigee Edge prend en charge l'en-tête Cache-Control
uniquement pour les réponses renvoyées par les serveurs d'origine du backend (la spécification HTTP/1.1 autorise les en-têtes Cache-Control
dans les requêtes client et les réponses du serveur d'origine). Les serveurs d'origine peuvent inclure à la fois des points de terminaison cibles définis dans un proxy d'API Apigee Edge et ceux créés à l'aide d'appels d'API TargetServer.
Limites de compatibilité de Cache-Control
Apigee Edge est compatible avec un sous-ensemble des fonctionnalités d'en-tête de réponse Cache-Control
définies dans la spécification HTTP/1.1. Remarques :
- Apigee Edge n'accepte pas les en-têtes
Cache-Control
qui arrivent avec des requêtes client entrantes. - Apigee Edge n'est compatible qu'avec la notion de caches publics. (D'après la spécification HTTP,
Cache-Control
peut être public (partagé) ou privé (utilisateur unique). - Apigee Edge n'accepte qu'un sous-ensemble d'instructions de réponse
Cache-Control
dans la spécification HTTP/1.1. Pour en savoir plus, consultez la section Compatibilité avec les instructions d'en-tête de réponse Cache-Control.
Compatibilité avec les instructions d'en-tête de réponse Cache-Control
Apigee est compatible avec des instructions d'un sous-ensemble issu de la spécification HTTP/1.1 pour les réponses des serveurs d'origine. Le tableau suivant décrit la compatibilité d'Apigee Edge avec les directives d'en-tête de réponse HTTP Cache-Control.
Pour en savoir plus sur les instructions répertoriées dans cette partie, consultez la section Cache-Control dans la spécification HTTP/1.1.
Instruction Cache-Control | Comment Apigee Edge traite la directive |
cache-extension |
Non compatible. |
max-age |
Si votre règle ResponseCache définit l'élément Cette instruction est remplacée par l'instruction |
must-revalidate |
Non compatible. Toutes les entrées de cache sont supprimées par Apigee Edge dès qu'elles expirent. |
no-cache |
Edge met en cache la réponse de l'origine, mais elle doit être revalidée avec le serveur d'origine avant d'être utilisée pour répondre à toute requête client ultérieure. Cette règle permet à l'origine de renvoyer une réponse 304 Not Modified afin d'indiquer que la réponse doit être renvoyée à partir du cache, et enregistre ainsi le traitement nécessaire pour la renvoyer dans son intégralité. Si le serveur d'origine renvoie une réponse complète, il remplace l'entrée de cache existante. Tous les noms de champs spécifiés avec cette instruction sont ignorés. |
no-store |
Non compatible. |
no-transform |
Non compatible. |
private |
Non compatible. Si cette instruction est reçue, la réponse d'origine n'est pas mise en cache. Tous les noms de champs sont ignorés. |
proxy-revalidate |
Non compatible. Toutes les entrées de cache sont supprimées par Apigee Edge dès qu'elles expirent. |
public |
Edge met en cache la réponse d'origine, même lorsque d'autres directives indiquent le contraire. Conformément à la spécification HTTP/1.1, la seule exception à cette règle s'applique lorsque la réponse inclut un en-tête d'autorisation. |
s-maxage |
Si votre règle ResponseCache définit l'élément Cette instruction remplace l'instruction |
Expire
Lorsque l'option UseResponseCacheHeaders
de la règle ResponseCache est définie sur true
, Edge peut utiliser l'en-tête Expires
pour déterminer la valeur TTL (Time To Live) d'une entrée mise en cache. Cet en-tête spécifie une date et une heure après lesquelles l'entrée du cache d'une réponse est considérée comme obsolète. Cet en-tête permet aux serveurs de signaler à quel moment vous pouvez renvoyer une valeur mise en cache en fonction d'un horodatage.
Les formats de date compatibles avec l'en-tête Expires
sont décrits dans la spécification HTTP/1.1. Exemple :
Date d'expiration : 1er décembre 1994 16:00:00 GMT
Pour plus d'informations sur les formats de date et d'heure HTTP, consultez la section Formats de date/heure dans la spécification HTTP/1.1.
Pour en savoir plus sur l'en-tête Expires
, consultez la section Définitions des champs d'en-tête dans la spécification HTTP/1.1.
ETag
Un tag d'entité (ETag) est un identifiant associé à une ressource demandée. À l'aide d'un ETag, un serveur peut déterminer si la ressource demandée et la ressource mise en cache associée correspondent. Par exemple, le serveur peut remettre en cache la réponse si elle ne correspond pas à celle actuellement mise en cache. Il peut renvoyer la ressource mise en cache si les ETag correspondent.
Lorsqu'un point de terminaison cible renvoie une réponse à Edge avec un ETag, Edge met en cache l'ETag avec la réponse.
Pour en savoir plus sur les tags d'entité, consultez la section Paramètres de protocole dans la spécification HTTP/1.1.
If-Match
Avec l'en-tête de requête If-Match
, une entité mise en cache est actuelle si l'ETag de l'en-tête correspond à l'ETag mis en cache. Toute requête autre que GET qui spécifie un en-tête If-Match
est transmise au serveur d'origine pour s'assurer que les installations de mise en cache d'origine ont la possibilité de traiter la requête.
Pour en savoir plus sur If-Match
, consultez la section Définitions des champs d'en-tête dans la spécification HTTP/1.1.
Si Edge reçoit une demande GET entrante d'un client qui comprend un en-tête If-Match
:
Si | Dans ce cas |
---|---|
L'en-tête If-Match spécifie un ou plusieurs ETags. |
|
L'en-tête If-Match indique le signe "*". |
La requête est transmise au serveur d'origine afin de garantir que les installations de mise en cache d'origine ont la possibilité de la traiter. |
Une entrée de cache avec le même URI de requête est trouvée, mais elle ne contient que des ETags faibles. | L'entrée doit être revalidée par le serveur d'origine avant d'être renvoyée au client. |
Les ETags proviennent du serveur d'origine. | L'ETag est renvoyé inchangé au client. |
If-None-Match
Avec l'en-tête If-None-Match
, une entité mise en cache est actuelle si l'ETag de l'en-tête ne correspond pas à l'ETag mis en cache. Les requêtes autres que GET contenant cet en-tête sont transmises au serveur d'origine.
Si Edge reçoit une demande GET entrante avec cet en-tête:
Si | Dans ce cas |
---|---|
L'en-tête If-None-Match spécifie un ou plusieurs ETags. |
|
L'en-tête |
Edge renvoie le statut 304 Non modifié |
Une entrée de cache avec le même URI de requête est trouvée, mais elle ne contient que des ETag faibles. | L'entrée doit être revalidée par le serveur d'origine avant que Edge la renvoie au client |
Edge reçoit un ETag d'un serveur d'origine | L'ETag est renvoyé inchangé au client. |
If-Modified-Since
Si Apigee Edge reçoit un en-tête If-Modified-Since
dans une requête GET, celui-ci est transmis au serveur d'origine, même si une entrée de cache valide existe.
Cela garantit que toutes les mises à jour d'une ressource qui n'ont pas transité par Apigee Edge sont prises en compte. Si le serveur d'origine renvoie une nouvelle entité, Edge remplace l'entrée de cache existante par la nouvelle valeur. Si le serveur renvoie un statut 304 Non modifié, Edge renvoie la valeur de réponse si l'en-tête Last-Modified
de la réponse mise en cache indique qu'elle n'a pas changé.
Accept-Encoding
Lorsqu'une requête entrante inclut l'en-tête Accept-Encoding
avec les valeurs gzip
, deflate
ou compress
, le serveur d'origine répond avec des données compressées. Lorsque les requêtes suivantes ne contiennent pas les en-têtes Accept-Encoding
, elles attendent une réponse non compressée. Le mécanisme de mise en cache de réponses d'Apigee est capable d'envoyer des réponses compressées et non compressées en fonction des en-têtes entrants sans revenir au serveur d'origine.
Vous pouvez ajouter des valeurs d'en-tête "Accept" aux clés du cache pour améliorer la pertinence des clés pour chaque élément mis en cache. Pour en savoir plus, consultez la section "Configurer une clé de cache" dans la Règle de réponse du cache.