Quelle pourrait être la différence entre if-modified-since et if-none-match? J'ai le sentiment que if-none-match est utilisé pour les fichiers alors que if-modified-since est utilisé pour les pages?
Réponses:
Concernant les différences entre Last-Modified/If-Modified-Since
et ETag/If-None-Match
:
Les deux peuvent être utilisés de manière interchangeable. Cependant, selon le type de ressource et la manière dont elle est générée sur le serveur, l'une ou l'autre des questions ("a-t-elle été modifiée depuis ...?" / "Est-ce que cela correspond toujours à cet ETag?") Peut être plus facile à répondre .
Exemples:
mtime
comme Last-Modified
date est la solution la plus simple.ETag
il sera beaucoup plus facile. Consultez ces liens pour plus de détails sur le sujet:
If-Modified-Since
est comparé au Last-Modified
considérant auquel 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 de If-Modified-Since
à Last-Modified
vous indique si la variante mise en cache est plus ancienne ou plus récente, tandis que la comparaison de If-None-Match
à ETag
vous donne simplement des informations si les deux sont identiques ou non. En outre, la plupart des ETag
générateurs incluent les informations de l' inode spécifique au système, de sorte que le déplacement d'un fichier vers un lecteur différent peut également le modifier ETag
.
La valeur d'horodatage utilisée dans Last-Modified / If-Modified-Since a une précision limitée - une seconde et ce n'est tout simplement pas suffisant pour un contenu à évolution rapide comme, par exemple, une application de chat Web où plus d'un message pourrait être publié à une seconde donnée . ETag / If-None-Match peut aider à résoudre ce problème.
Comme indiqué dans les meilleures pratiques de Google:
Il est important de spécifier l'un parmi Expires ou Cache-Control max-age, et un parmi Last-Modified ou ETag, pour toutes les ressources pouvant être mises en cache. Il est redondant de spécifier à la fois Expires et Cache-Control: max-age, ou de spécifier à la fois Last-Modified et ETag.
https://developers.google.com/speed/docs/best-practices/caching
Last-Modified
avec ETag
(ou, du côté useragent, If-Modified-Since
avec If-None-Match
) n'est mentionnée. De même, la spécification W3 ne vous limite pas. Il dit de ne pas utiliser If-Modified-Since
avec If-Match
, mais je suppose que c'est parce que l'ensemble de documents qui ont des dates mises à jour mais le même contenu que celui défini par l'ETag devrait être assez petit.
If-Modified-Since utilise une date, tandis que If-None-Match utilise un ETag . Ils peuvent tous deux être utilisés pour des "pages" (c'est-à-dire HTML) et d'autres fichiers.
À moins d'être déclaré faible par le serveur, un ETag est considéré comme un validateur fort et peut donc être utilisé pour satisfaire une requête à distance conditionnelle. Cependant, la plupart des ETags générés automatiquement présentent des difficultés dans les situations de batterie de serveurs, car ils utilisent souvent des informations d'inode et / ou un compteur persistant unique. En pratique, j'ai trouvé que l'en-tête Last Modified était suffisant pour un contenu assez statique, par exemple pour servir du contenu statique protégé, car l'heure d'écriture du fichier fait un validateur raisonnablement bon.
L'ETag est de loin le plus flexible. Les clients conformes sont tenus d'envoyer l'ETag dans une demande conditionnelle, alors qu'ils DEVRAIENT envoyer les deux s'ils sont disponibles.
L'en-tête If-Modified-Since est utilisé pour spécifier l'heure à laquelle le navigateur a reçu pour la dernière fois la ressource demandée. L'en-tête If-None-Match est utilisé pour spécifier l'étiquette d'entité que le serveur a émise avec la ressource demandée lors de sa dernière réception.
Dans les deux manières décrites, ces en-têtes sont utilisés pour prendre en charge la mise en cache du contenu dans le navigateur, et ils permettent au serveur d'indiquer au navigateur d'utiliser une copie mise en cache d'une ressource, plutôt que de répondre avec le contenu complet de la ressource si c'est pas nécessaire.