Obtenir les ETags droit
J'ai lu un livre et j'ai une question à propos de l'ETag chapitre. L'auteur dit que les ETags pourrait nuire à la performance et que vous devez régler finement ou de les désactiver complètement.
Je sais déjà ce que les ETags sont et de comprendre les risques, mais est-il si difficile de le faire ETags droit?
Je viens de faire une application qui envoie un ETag dont la valeur est le hash MD5 du corps de la réponse. C'est une solution simple, facile à réaliser dans de nombreuses langues.
-
Est à l'aide de hachage MD5 du corps de la réponse que ETag mal? Si oui, pourquoi?
-
Pourquoi l'auteur (qui, évidemment, feinte m'par plusieurs ordres de grandeur) n'est pas de proposer une solution aussi simple?
Cette dernière question est difficile à répondre, sauf si vous êtes l'auteur :), donc j'essaie de trouver les points faibles de l'utilisation d'un hachage MD5 comme un ETag.
- Il n'est jamais sûr de supposer que l'auteur de feinte-vous un peu.
- D'accord, mais il est encore moins sûr de supposer que vous déjouer l'auteur.
- et nous ne le touche même pas l'intelligence de web commentateurs, d'une façon ou de l'autre 😉
- vous faites "hachage MD5 du corps de la réponse" signifie que votre serveur a eu pour produire la même réponse en plus de calculer le hash!? si oui, vous avez sauvé la transmission de données, mais pas la charge du serveur.
- Même la charge du serveur peut être sauvé, quand, après le premier calcul de la valeur mise en cache, vous savez quels sont les événements qui peuvent invalider et pouvez vous abonner à tous ces événements. Cela peut devenir compliqué...
Vous devez vous connecter pour publier un commentaire.
ETag est similaire à la Dernière modification de l'en-tête. C'est un mécanisme pour déterminer le changement par le client.
Sans doute, un ETag qui se trouve être la date de Dernière modification (c'est à dire le même texte) répond à tous les critères nécessaires pour un ETag. Il doit simplement être une valeur unique qui représente l'état d'une ressource. Pas unique sur l'ensemble du domaine des ressources, tout simplement au sein de la ressource.
Maintenant, techniquement, un ETag est "infinie" la résolution par rapport à la Dernière modification de l'en-tête. Dernière modification seuls changements à une granularité de 1 seconde, alors qu'un ETag peut être sous la seconde.
Vous pouvez mettre en œuvre à la fois ETag et de Dernière modification, ou tout simplement de l'un ou l'autre (ou aucun, bien sûr). Si vous Last-Modified n'est pas suffisant, alors envisager d'en-tête ETag.
L'esprit, je ne serais pas fixer ETag pour "tous" les ressources. Fondamentalement, je ne serais pas pour quelque chose qui n'a pas l'attente de la mise en cache (contenu dynamique notamment). Il n'y a aucun point dans ce cas, il suffit de gaspillage de travail.
Edit: je vois votre travail d'édition, et de clarifier.
MD5 est bien. Le seul inconvénient est le calcul MD5 de tous les temps. L'exécution de MD5, disons, d'un 200K fichier PDF, est cher. L'exécution MD5 sur une ressource qui n'a pas l'attente de la mise en cache est tout simplement du gaspillage (c'est à dire du contenu dynamique).
Le truc, c'est simplement que, quel que soit le mécanisme utilisé, il doit être aussi bon marché que la Dernière modification est généralement. Dernière modification est, encore une fois, en général, une propriété de la ressource, et généralement très bon marché pour l'accès.
ETags devrait être aussi bon marché. Si vous êtes à l'aide de MD5, et vous pouvez mettre en cache/magasin de l'association entre la ressource et le hachage MD5, alors que c'est une belle solution. Cependant, recalculer le MD5 à chaque fois que l'ETag est nécessaire, est fondamentalement contraire à l'idée d'utiliser les ETags pour améliorer les performances globales du serveur.
Nous utilisons les etags pour notre contenu dynamique dans instela.
Notre stratégie est à la fin de la production de générer le hachage md5 du contenu d'envoyer et de si les si-none-match de l'en-tête existe, nous comparons l'en-tête avec le hachage généré. Si les deux valeurs sont les mêmes, nous envoyer 304 code et interrumpt la demande sans retourner n'importe quel contenu.
Il est vrai que l'on consomme un peu de cpu pour hacher le contenu, mais enfin nous économisons beaucoup de bande passante.
Nous avons un facebook fil d'actualité de style de la page principale qui a un contenu différent pour chaque utilisateur. Comme le fil d'actualité des changements de contenu de seulement 3 à 4 fois par heure, la page principale rafraîchit sont si efficaces pour le côté client. Dans l'ère mobile, je pense qu'il vaut mieux passer un peu plus de temps processeur que de passer de la bande passante. La bande passante est toujours plus cher que le CPU, et c'est une meilleure expérience pour le client.
Ayant pas lu le livre, je ne peux pas parler sur l'auteur précise préoccupations.
Cependant, la génération de ETags doit être telle qu'un ETag est seulement lorsqu'une page a changé. Générer un hash MD5 d'une page web, les coûts de traitement de l'alimentation et de l'heure sur le serveur; si vous avez de nombreux clients se connectant, il pourrait commencer à causer des problèmes de performances.
Donc, vous avez besoin d'une bonne technique pour générer des ETags seulement lorsque nécessaire et la mise en cache sur le serveur jusqu'à ce que la page liée à des changements.
Je pense que le
perceived problem
avec les ETAGS est probablement que votre navigateur a de problème et analyser une (simple et petit) de requête /réponse pour chaque ressource sur votre page pour vérifier si la valeur etag a changé de côté de serveur.Personnellement, je trouve ces petits allers-retours vers le serveur acceptable pour la changer souvent les images, css, javascript (le serveur n'a pas besoin de renvoyer le contenu si le navigateur de l'etag est en cours) puisque le mécanisme le rend très facile à cocher " mise à jour de contenu.
max-age
ouExpires
serait de laisser le client sait combien à attendre sans envoyer de même que de minuscules "est-il rien de nouveau?" demande. De sorte que vous pouvez enregistrer les allers-retours trop.why not just say that?
peu: la réponse est probablement droit dans le titre de l'ouvrage (High performance web sites). Etags (et de leurs allers-retours) ne ajouter certains frais généraux et pourrait être un facteur important à considérer sur un très chargé serveur (mais en même temps, ils ajoutent de la souplesse)...max-age
ouexpires
ne peut donner aucune garantie pour vous que le client est toujours (!) la réception de la plus à jour de contenu.