Quelle serait la différence entre if-modified-since et if-none-match ? J’ai le sentiment qu’if-none-match est utilisé pour les fichiers alors qu’if-modified-since est utilisé pour les pages ?
Réponses
Trop de publicités?Concernant les différences entre Last-Modified/If-Modified-Since
et ETag/If-None-Match
:
Les deux peuvent être utilisés de façon interchangeable. Toutefois, selon le type de ressource, et comment il est généré sur le serveur, l'une ou l'autre question ("cela a été modifié depuis ...?" / "est-ce toujours correspondre à ce ETag?") peut-être plus facile de répondre.
Exemples:
- Si vous servez des fichiers, à l'aide du fichier
mtime
leLast-Modified
date est la solution la plus simple. - Si vous recherchez une page web dynamique construit à partir d'un certain nombre de requêtes SQL, de vérifier si les données renvoyées par une de ces requêtes a changé peut-être impossible (à moins que tous ont une sorte de "dernière modification" de la colonne). Dans ce cas, en utilisant par exemple un hachage md5 du contenu de la page que l'
ETag
sera beaucoup plus facile.
Otoh, que, cela signifie que vous avez encore à générer l'ensemble de la page sur le serveur, même pour un conditionnelle OBTENIR. Déterminer exactement ce qui doit aller dans l'ETag (clés primaires, les numéros de révision, ... etc). vous pouvez économiser beaucoup de temps ici.
Voir ces liens pour plus de détails sur le sujet:
If-Modified-Since
est par rapport à l' Last-Modified
alors qu' If-None-Match
est comparé à d' ETag
. Les deux Modified-Since
et ETag
peut être utilisée pour identifier une variante spécifique d'une ressource.
Mais la comparaison des If-Modified-Since
de Last-Modified
vous donne les informations de déterminer si la mise en cache variante est plus vieux ou plus récent alors que la comparaison des If-None-Match
de ETag
vous donne juste l'information si les deux sont identiques ou pas. En outre, la plupart des ETag
générateurs d'inclure les informations du système d' inode donc le déplacement d'un fichier vers un autre lecteur est peut modifier l' ETag
.
Valeur d’horodatage utilisé dans Last-Modified/If-Modified-Since a limité la précision - une seconde et ce n’est pas suffisant pour un changement rapide contenu comme, par exemple, application de Web-chat où plus d’un message a pu être publié à toute donnée seconde. ETag/If-None-Match peut aider à résoudre ce problème.
Comme il est dit dans les meilleures pratiques de google :
Il est important de spécifier l’un des Expires ou contrôle de Cache max-age et de Last-Modified ou ETag, pour toutes les ressources cachables. Il est superflu de spécifier Expires et Cache-Control : max-age, ou à spécifier à la fois Last-Modified et ETag.
https://developers.Google.com/Speed/docs/Best-Practices/Caching
If-Modified-Since utilise une date, tandis que If-None-Match utilise un ETag. Ils peuvent tous deux être utilisés pour « pages » (p. ex. HTML) et d’autres fichiers.