Comme nous le savons tous, l'envoi d'un en-tête de réponse Vary: Some-Header
fait que les caches stockent (ou devraient causer) différentes variantes de la réponse, une pour chaque valeur de Some-Header:
qu'il rencontre dans les requêtes. Cependant, cette méthode présente des inconvénients avec les en-têtes qui présentent des variations énormes, tels que User-Agent:
ou Accept-Language:
.
Supposons que notre serveur souhaite varier en fonction d'un en-tête très variable, mais ne contient en réalité qu'une poignée de variantes. Je pense que la suite presque fonctionne:
Etag: variant42-version1
et Vary: If-none-match
If-none-match: variant42-version1
et tentera donc de le récupérer dans le cache.If-none-match: variant42-version1
et le contenu en cache lui sera alors servi.Le problème avec ceci est le cas initial d'aucun Etag du tout. Ce sont les premiers visiteurs pour lesquels l'évaluation compliquée de la version à servir doit être effectuée - mais nous devrions tout de même modifier les en-têtes d'origine au lieu de Si-aucun-match ... un cercle vicieux.
Cela peut-il être fait? (Ou est-ce que l'effet souhaité de réduction des variantes pouvant être cachées peut être obtenu différemment?)
Sur la base de votre question et de votre commentaire de clarification, il serait préférable d'utiliser l'URL plutôt que l'en-tête afin de mieux gérer les serveurs de mise en cache en aval. En d'autres termes, la première fois que vous établissez la connexion, vérifiez l'en-tête de la langue, puis redirigez-le vers le contenu approprié via une URL (quelque chose comme www.domain.com/en/
ou www.domain.com/de
). En faisant cela, vous ne devrez rien faire de spécial pour la mise en cache des serveurs. De plus, certains serveurs de mise en cache ne sont pas correctement configurés pour prendre en charge les variantes sur les pages et peuvent donc casser les modifications de langue basées sur l'en-tête (l'utilisateur veut l'allemand mais la version anglaise est mise en cache et renvoyée par le serveur de mise en cache).
Même les plus grands sites sur Internet, tels que Microsoft, insèrent le code de langue dans l'URL pour assurer la meilleure prise en charge des serveurs de mise en cache en aval.