40 votes

Qu'est-vary:accept-encoding veux dire?

le google page speed addon m'informe:

The following publicly cacheable, compressible resources should have a "Vary: Accept-Encoding" header:
//some .js and .css files

Je ne comprends pas ce que cela signifie. J'ai déjà compressé ces fichiers comme ceci:

if (encodings.Contains("gzip") || encodings == "*")
{
    app.Response.Filter = new GZipStream(baseStream, CompressionMode.Compress);
    app.Response.AppendHeader("Content-Encoding", "gzip");
}

Et cela semble fonctionner. Pourquoi avoir Vary: Accept-Encoding - elle nécessaire?

24voto

spender Points 51307

C'est qui le cache à servir des différentes versions mises en cache de la page en fonction de si oui ou non le navigateur demande l'encodage GZIP ou pas. L'en-tête vary indique le cache pour stocker une version différente de la page, si il n'y a aucune variation dans l'en-tête indiqué.

En l'état des choses, il y aura un (éventuellement compressé) copie de la page dans le cache. Dire que c'est la version compressée: Si quelqu'un demande la ressource, mais ne prend pas en charge l'encodage gzip, ils vont être servis le mal de contenu.

18voto

Piskvor Points 46986

Tout droit de la bouche des chevaux:

Un HTTP/1.1 serveur DOIT inclure un en-tête Vary terrain avec tout à mettre en cache la réponse qui est soumis à pilotée par le serveur de négociation. Cela permet à un cache pour interpréter correctement les demandes futures sur les ressources et les informe l'utilisateur de l'agent au sujet de la présence de la négociation sur cette ressource.
[...]
Une Varier la valeur du champ, consistant en une liste de domaine-noms de signaux que la représentation choisie pour la réponse est basée sur un algorithme de sélection qui considère que la demande de l'en-tête des valeurs de champ dans le choix de la plus appropriée de représentation. Un cache PEUT supposer que la même sélection sera faite pour les demandes à venir avec les mêmes valeurs pour la liste des noms de champ, pour la durée de la période pour laquelle la réponse est frais.

En d'autres termes, Vary: Accept-Encoding indique au navigateur que les deux peuvent être mises en cache les réponses d'une même ressource sera la même, même si l' Accept-Encoding - tête de la requête est différent ("variable").

Exemple (non pertinents bits omis):

GET /js/somefile.js HTTP/1.1
Accept-Encoding: gzip

HTTP/1.1 200 OK
Vary: Accept-Encoding
Content-Encoding: gzip

// body of the response here

Cela signifie que vous obtiendrez le même script, peu importe si vous demandez à la compression ou pas.

11voto

cori Points 4356

Vary: Accept-Encoding informe le comportement du serveur à l'égard de la mise en cache de la représentation de la ressource demandée. Si une nouvelle demande pour une ressource de cache est reçu, il sera servi à partir du cache, à moins que l'-tête Accept-Encoding de la nouvelle requête est différente de la déjà mis en cache de la représentation, à laquelle la demande sera traitée comme une nouvelle demande et ne seront pas servies depuis le cache.

** EDIT ** Comme dépense des points si vous servez un fichier compressé à partir du cache et le client n'accepte pas vos mécanisme de compression, ils obtenir une page d'ordure, donc oui, c'est nécessaire. On n'aurait pas forcément l'avis de la différence par le biais d'un test normal, cependant.

Voir http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44 et http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X