Mise en cache de contenu basée sur les paramètres de chaîne de requête
Certaines applications web utilisent des chaînes de requête pour envoyer des informations à l'origine. Une chaîne de requête est la partie d'une requête web qui s'affiche après un caractère ? ; la chaîne peut contenir un ou plusieurs paramètres séparés par des caractères &. Dans l'exemple suivant, la chaîne de requête comprend deux paramètres, color=red et size=large :
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large
Pour les distributions, vous pouvez préciser si CloudFront doit réacheminer les chaînes de requête vers votre origine et si le contenu doit être mis en cache en fonction de tous les paramètres ou des paramètres sélectionnés. Pourquoi est-ce utile ? Prenez l'exemple de code suivant.
Supposons que votre site web soit disponible en cinq langues. La structure du répertoire et les noms de fichier des cinq versions du site web sont identiques. Lorsqu'un utilisateur consulte votre site web, les demandes qui sont transmises à CloudFront comprennent un paramètre de chaîne de requête basé sur la langue choisie par l'utilisateur. Vous pouvez configurer CloudFront de façon à réacheminer les chaînes de requête à l'origine et à les mettre en cache en fonction du paramètre de langue. Si vous configurez votre serveur web pour renvoyer la version d'une page donnée qui correspond à la langue sélectionnée, CloudFront met en cache chaque version séparément, en fonction de la valeur du paramètre de la chaîne de requête de langue.
Dans le cadre de cet exemple, si la page d'accueil de votre site web est main.html, à la suite des cinq demandes suivantes, CloudFront met en cache main.html cinq fois, une fois pour chaque valeur du paramètre de la chaîne de requête de langue :
-
https://d111111abcdef8.cloudfront.net/main.html?language=de -
https://d111111abcdef8.cloudfront.net/main.html?language=en -
https://d111111abcdef8.cloudfront.net/main.html?language=es -
https://d111111abcdef8.cloudfront.net/main.html?language=fr -
https://d111111abcdef8.cloudfront.net/main.html?language=jp
Remarques :
-
Certains serveurs HTTP ne traitent pas les paramètres des chaînes de requête et ne renvoient donc pas de versions différentes d'un objet basé sur les valeurs des paramètres. Pour ces origines, si vous configurez CloudFront de façon à réacheminer les paramètres de la chaîne de requête vers l'origine, il poursuit la mise en cache en fonction des valeurs de paramètre même si l'origine renvoie des versions identiques de l'objet vers CloudFront pour chaque valeur de paramètre.
-
Pour que les paramètres de chaîne de requête fonctionnent comme décrit dans l'exemple ci-dessus avec les langues, vous devez utiliser le caractère
&comme délimiteur entre les paramètres de chaîne de requête. Si vous utilisez un autre délimiteur, vous pouvez obtenir des résultats inattendus, en fonction des paramètres que vous définissez que CloudFront doit utiliser comme base de mise en cache et de l'ordre dans lequel ceux-ci apparaissent dans la chaîne de requête.Les exemples suivants illustrent ce qui se passe si vous utilisez un autre délimiteur et que vous configurez CloudFront de sorte qu'il effectue la mise en cache en fonction du paramètre
coloruniquement :-
Dans la demande suivante, CloudFront met en cache votre contenu en fonction de la valeur du paramètre
color, mais interprète la valeur en tant que paramètrered;size=large:https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red;size=large -
Dans la requête suivante, CloudFront met en cache votre contenu, mais ne s'appuie pas sur les paramètres de la chaîne de requête pour cela. En effet, vous avez configuré CloudFront de sorte qu'il effectue la mise en cache sur la base du paramètre
color, mais il interprète la chaîne suivante comme si elle contenait uniquement un paramètresizedont la valeur estlarge;color=red:https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large;color=red
-
Vous pouvez configurer CloudFront de façon à ce qu'il exécute l'une des opérations suivantes :
-
Ne réachemine pas du tout les chaînes de requête vers l'origine. Si vous ne réacheminez pas les chaînes de requête, CloudFront ne réalise pas la mise en cache en fonction des paramètres de la chaîne de requête.
-
Réachemine les chaînes de requête vers l'origine et mette en cache en fonction de tous les paramètres de la chaîne de requête.
-
Réachemine les chaînes de requête vers l'origine et mette en cache en fonction des paramètres spécifiés de la chaîne de requête.
Pour plus d’informations, consultez Optimisation de la mise en cache.
Rubriques
Paramètres de console et d'API pour le réacheminement et la mise en cache des chaînes de requête
Lorsque vous créez une distribution dans la console CloudFront, CloudFront configure pour vous le transfert et la mise en cache des chaînes de requête en fonction du type d’origine. Vous pouvez, si vous le souhaitez, modifier manuellement ces paramètres. Pour plus d’informations, consultez les paramètres suivantes dans le Référence de tous les paramètres de distribution :
Pour configurer le transfert et la mise en cache des chaînes de requête avec l’API CloudFront, consultez CachePolicy et OriginRequestPolicy dans la Référence des API Amazon CloudFront.
Optimisation de la mise en cache
Lorsque vous configurez CloudFront pour la mise en cache en fonction des paramètres de chaîne de requête, vous pouvez suivre les étapes ci-dessous pour réduire le nombre de demandes que CloudFront transmet à votre origine. Lorsque les emplacements périphériques CloudFront servent des objets, vous réduisez la charge sur votre serveur d'origine, ainsi que la latence, car les objets sont servis à partir d'emplacements qui sont plus proches des utilisateurs.
- Mettre en cache uniquement sur des paramètres pour lesquels votre origine renvoie des versions différentes d'un objet
-
Pour chaque paramètre de chaîne de requête réacheminé par votre application web vers CloudFront, ce dernier réachemine les demandes vers votre origine pour chaque valeur de paramètre et met en cache une version distincte de l'objet pour chaque valeur de paramètre. Ceci est le cas même si votre origine renvoie toujours le même objet quelle que soit la valeur du paramètre. Dans le cas de plusieurs paramètres, le nombre de requêtes et le nombre d'objets sont multipliés.
Nous vous recommandons de configurer CloudFront de façon à effectuer uniquement la mise en cache en fonction des paramètres de la chaîne de requête pour lesquels votre origine renvoie des versions différentes, et que vous réfléchissiez avec soin aux avantages de la mise en cache basée sur chaque paramètre. Par exemple, supposons que vous ayez un site web de vente au détail. Vous présentez les photos d'une veste dans six couleurs différentes et cette veste est disponible dans 10 tailles. Les photos que vous affichez pour la veste montrent les différentes couleurs proposées, mais pas les différentes tailles. Afin d'optimiser la mise en cache, vous devez configurer CloudFront de façon à mettre en cache les objets uniquement selon le paramètre de couleur, et non en fonction du paramètre de taille. Ceci augmente la probabilité que CloudFront puisse traiter une demande à partir du cache, ce qui améliore les performances et diminue la charge sur votre origine.
- Toujours répertorier les paramètres dans le même ordre
-
L'ordre des paramètres a de l'importance dans les chaînes de requête. Dans l'exemple suivant, les chaînes de requête sont identiques, mais les paramètres sont dans un ordre différent. CloudFront va donc réacheminer deux demandes distinctes pour image.jpg vers votre origine et mettre en cache deux versions distinctes de l'objet :
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large -
https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large&color=red
Nous vous recommandons de toujours utiliser le même ordre pour la liste des noms de paramètres, par exemple l'ordre alphabétique.
-
- Toujours utiliser la même casse pour les noms et les valeurs des paramètres
-
CloudFront tient compte de la casse des noms et des valeurs des paramètres lors de la mise en cache en fonction des paramètres de la chaîne de requête. Dans l'exemple suivant, les chaînes de requête sont identiques sauf dans le cas des noms et des valeurs des paramètres. CloudFront va donc réacheminer quatre demandes distinctes pour image.jpg vers votre origine et mettre en cache quatre versions distinctes de l'objet :
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red -
https://d111111abcdef8.cloudfront.net/images/image.jpg?color=Red -
https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=red -
https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=Red
Nous vous recommandons d'utiliser systématiquement la même casse pour les noms et valeurs des paramètres, par exemple des minuscules.
-
- N'utilisez pas de noms de paramètres qui soient en conflit avec les URL signées
-
Si vous utilisez des URL signées pour restreindre l'accès à votre contenu (si vous avez ajouté des utilisateurs de confiance à votre distribution), CloudFront enlève les paramètres de chaîne de requête suivants avant de transmettre le reste de l'URL à votre origine :
-
Expires -
Key-Pair-Id -
Policy -
Signature
Si vous utilisez des URL signées et que vous souhaitez configurer CloudFront de façon à réacheminer les chaînes de requête vers votre origine, vos propres paramètres de chaîne de requête ne peuvent pas être nommés
Expires,Key-Pair-Id,PolicyouSignature. -
Paramètres des chaînes de requête et journaux standard CloudFront (journaux d'accès)
Si vous activez la journalisation, CloudFront consigne l'URL complète, y compris les paramètres de la chaîne de requête. C'est le cas que vous ayez ou non configuré CloudFront de façon à réacheminer les paramètres des chaînes de requête. Pour plus d’informations sur la journalisation CloudFront, consultez Journalisation standard (journaux d’accès).