Étant donné qu'un fichier étant renvoyé dans le cadre d'une demande HTTP. Quelle est la méthode correcte de créer un etag pour ce fichier? P>
http://www.w3.org/protocols/rfc2616/rfc2616-sec14 .html # sec14.19 p>
Je l'ai vu faire plusieurs manières p>
3 Réponses :
La réponse est que cela dépend. P>
Il y a deux types d'étagères, faibles et forts. Les faibles vous permettent de faire certaines opérations conditionnelles, mais la plupart d'entre elles nécessiteront des étans forts. P>
La seule restriction sur un ETAG fort est que si la représentation change pour une raison quelconque, l'ETAG. Si c'est un fichier, vous pouvez générer un hachage, mais qui vous oblige à garder l'entité en mémoire pendant que vous générez cela. Sinon, vous pouvez simplement diffuser le contenu et ajouter l'EAG comme une en-tête HTTP de fin, mais presque aucun serveur ne prend en charge actuellement la fonctionnalité (très utile et non aimée). P>
Les tiques ont une faible résolution et il est possible que deux écrivies contiguës sur le même fichier auront le même nombre de ticks, même si le contenu est différent. À ce stade, l'Etag est maintenant invalide s'il était fort et que vous êtes dans de l'eau boueuse. Même problème que pour la dernière modification vraiment. La plupart des serveurs HTTP traitent que cela consiste à donner à un fichier un etag basé sur plusieurs propriétés, aka horodatage, taille et probablement d'objet d'objet de fichier (Inode dans Apache, ajout probablement le chemin complet de l'entrée du magasin d'objet sur NT et IIS ajoute un compteur à cette valeur aussi pour que deux modifications de configuration sur un serveur généreraient différentes Etags, au cas où quelque chose change). P>
Si vous utilisez une sorte de base de données, la version ID + devrait être une etag forte (fournie, à nouveau, que le contenu que vous n'êtes pas un agrégat de multiples choses que chacun peut changer de manière autonome sans les versions de changement de racine aussi) . p>
Alors, comment calculer cela dépend vraiment de votre scénario et de persister un hachage du fichier sur l'écriture (avant de commencer la servition) vous aidera probablement au maximum, surtout comme une fonctionnalité très utile à avoir pour de nombreuses autres raisons. < / p>
sémantiquement l'ETAG doit changer lorsque le contenu change: p>
de sorte que le hachage semble approprié ... mais l'Etag doit également être unique sur différentes URL et / ou des horodatages différents de fichiers en double ... Donc, de manière à ce que le fichier est sûr, concaténer qu'avec l'horodatage de la Dernière modification et URL et hachage qui encore ... P>
Pour générer un etag de fichier statique qui sera compatible avec nginx: voir Mon commentaire sur différents schemas Etag P> P>