Question

Quelle pourrait être la différence entre si-Modified-Since et si aucun-match? J'ai le sentiment que si aucun match-est utilisé pour les fichiers alors que si-Modified-Since est utilisé pour les pages?

Était-ce utile?

La solution

En ce qui concerne les différences entre Last-Modified/If-Modified-Since et ETag/If-None-Match:

Les deux peuvent être utilisés de façon interchangeable. Cependant, selon le type de ressource, et la façon dont il est généré sur le serveur, l'une ou l'autre question ( « a été modifiée depuis ce ...? » / « Ne correspond toujours ce ce ETag? ») Peut être plus facile de répondre .

Exemples:

  • Si vous servez des fichiers, en utilisant le mtime du fichier comme la date de Last-Modified est la solution la plus simple.
  • Si vous servez une page Web dynamique construit à partir d'un certain nombre de requêtes SQL, vérifier si les données renvoyées par l'une de ces requêtes a changé peut-être peu pratique (à moins que tous ont une sorte de colonne « Dernière modification ») . Dans ce cas, en utilisant par exemple un hachage md5 du contenu de la page en tant que ETag sera beaucoup plus facile.
    OTOH, cela signifie que vous avez encore à générer la page entière sur le serveur, même pour un GET conditionnel. Déterminer exactement ce qui a aller dans le ETag (clés primaires, les numéros de révision, ... etc.) peut vous faire économiser beaucoup de temps ici.

Voir ces liens pour plus de détails sur le sujet:

Autres conseils

If-Modified-Since est comparée à la Last-Modified alors que If-None-Match est comparé à ETag . Les deux Modified-Since et ETag peuvent être utilisés pour identifier une variante spécifique d'une ressource.

Mais la comparaison des If-Modified-Since à Last-Modified vous donne les informations que la variante en cache est plus ou nouvelle alors que la comparaison de If-None-Match à ETag vous donne juste les informations si les deux sont identiques ou non. En outre ne la plupart des générateurs de ETag comprennent les informations du inode pour déplacer un fichier vers un lecteur différent peut changer le ETag ainsi.

timestamp utilisée dans Last-Modified / If-Modified-Since a une précision limitée - une seconde et qui est tout simplement pas assez pour changer le contenu rapide comme, par exemple, l'application chat Web où plus d'un message pourrait être affiché à toute donnée seconde. ETag / If-None-Match peut aider à résoudre ce problème.

Comme il est indiqué dans les meilleures pratiques de Google:

  

Il est important de spécifier l'une des Expires ou Cache-Control max-age, et l'un des derniers-Modified ou ETag, pour toutes les ressources cacheable. Il est superflu de préciser à la fois et Expires Cache-Control: max. Âge, ou pour spécifier Last-Modified et ETag

https://developers.google.com/speed/docs/best-practices/caching

If-Modified-Since utilise une date , alors que If-None-match utilise un ETag . Ils peuvent tous deux être utilisés pour « pages » (à savoir HTML) et d'autres fichiers.

Sauf indication que faible par le serveur, un ETag est considéré comme un validateur fort, et peut ainsi être utilisés pour satisfaire une demande conditionnelle ont varié. Cependant, la plupart exposition générée automatiquement ETAG difficultés dans les situations de la batterie de serveurs, car ils utilisent souvent des informations inode et / ou un compteur persistant unique. Dans la pratique, j'ai trouvé l'en-tête Dernière mise à jour suffisant pour le contenu assez statique, par exemple au service des contenus statiques protégé, car le temps d'écriture du fichier fait un assez bon validateur.

Le ETag est de loin le plus flexible. Les clients conformes doivent envoyer le ETag dans une demande conditionnelle, alors qu'ils devraient envoyer à la fois si elles sont disponibles.

Le If-Modified-Since est utilisé pour indiquer l'heure à laquelle le navigateur dernière a reçu la ressource demandée. L'en-tête If-None-Match est utilisé pour spécifier la balise d'entité que le serveur émis avec la ressource demandée lors de sa dernière réception.

Dans les deux méthodes décrites, ces en-têtes sont utilisés pour soutenir la mise en cache du contenu dans le navigateur, et ils permettent au serveur de charger le navigateur d'utiliser une copie en cache d'une ressource, plutôt que de répondre à la totalité du contenu de la ressource si ce n'est pas nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top