Comment les caches proxy HTTP décident entre le service des ressources par rapport codées identitaires gzip?
-
22-08-2019 - |
Question
Un serveur HTTP utilise-négociation de contenu pour servir une seule URL ou gzip-identitaire codé sur la base de l'en-tête Accept-Encoding
du client.
Maintenant que nous avons un cache proxy comme Squid entre les clients et le httpd.
Si le proxy a mis en cache les deux encodages d'une URL, comment est-elle déterminer quels servir?
L'instance non-gzip (pas à l'origine servi avec Vary
) peut être servi à tout client, mais les instances codées (ayant de Vary: Accept-Encoding
) ne peut être envoyé à un client avec la valeur d'en-tête de Accept-Encoding
identique a été utilisé dans la demande initiale .
par exemple. Opera envoie "deflate, gzip, x-gzip, identity, *;q=0"
mais IE8 envoie "gzip, deflate"
. Selon les spécifications, alors, les caches ne doivent pas partager les caches codées de contenu entre les deux navigateurs. Est-ce vrai?
La solution
Tout d'abord, il est à mon humble avis pas incorrect d'envoyer « Variez: Accept-Encoding ». En effet, lorsque l'entité Varie par cet en-tête (ou son absence)
Cela étant dit, les spécifications ne permettant pas actuellement en effet au service de la réponse en cache à l'Opéra, car la tête Vary ne correspond pas selon les définitions HTTPbis, partie 6, section 2.6 . Peut-être cela est un domaine où nous devons assouplir les exigences pour les caches (vous pouvez suivre sur la page liste de diffusion IETF HTTP ...
Mise à jour: se avère que ce qui était déjà marqué comme une question ouverte; Je viens d'ajouter un problème dans notre numéro de suivi pour cela, voir Problème 147 .
Autres conseils
Julian a raison, bien sûr. Leçon:. Toujours envoyer Vary: Accept-Encoding
quand renifler Accept-Encoding
, peu importe ce que le codage de réponse
Pour répondre à ma question, si vous laissez tort Vary
dehors, si un proxy reçoit une réponse non codée (sans Vary
), il peut simplement mettre en cache et renvoyer ce pour chaque requête (en ignorant Accept-Encoding
). Squid Est-ce .
Le gros problème avec laissant de côté Variez est que si le cache reçoit une variante codée sans Variez alors il peut envoyer ce en réponse à d'autres demandes, même si leur Accept-Encoding indique que le client ne peut pas comprendre le contenu.