Question

Il semble y avoir deux façons distinctes pour mettre en œuvre les requêtes conditionnelles en utilisant en-têtes HTTP, qui peuvent tous deux être utilisés pour la mise en cache, les demandes de plage, contrôle etc ... concurrency:

  1. Si-Unmodified-Since et If-Modified-Since , où le client envoie un horodatage de la ressource.
  2. If-Modified et If-None-Modified , où le client envoie un ETag représentation de la ressource.

Dans les deux cas, le client envoie une information qu'il a sur la ressource, ce qui permet au serveur de déterminer si la ressource a changé depuis que le client a vu la dernière fois. Le serveur décide alors d'exécuter la demande en fonction de l'en-tête conditionnel fourni par le client.

Je ne comprends pas pourquoi deux approches distinctes sont disponibles. Certes, ETags annulent et remplacent horodatages, car le serveur peut choisir assez facilement pour générer ETags de horodatages.

Alors, mes questions sont:

  • Dans quels scénarios pourraient vous favoriser Si-Unmodified-Since / If-Modified-Since sur ETags?
  • Dans quels scénarios pourraient vous besoin à la fois?
Était-ce utile?

La solution

Une fois, je réfléchissais la même chose, et réalisé qu'il y a une différence qui est très important: Les dates peuvent être commandés, ETags ne peut pas.

Cela signifie que si une ressource a été modifiée il y a un an, mais jamais depuis, et nous le savons. Ensuite, nous pouvons répondre correctement à un Si-Unmodified-Since demande de dates arbitraires l'année dernière et acceptez que vous ... il a été non modifiée depuis cette date.

Un eTag est seulement comparable d'identité. Soit il est le même ou non. Si vous avez la même ressource que ci-dessus, et au cours de l'année, le docroot a été déplacé vers un nouveau disque et système de fichiers, donnant tous les fichiers nouveaux inodes, mais en conservant la date de modification. Et quelqu'un avait fondé les ETags sur le numéro d'inode du fichier. Ensuite, nous ne pouvons pas dire que l'ancien ETag est toujours correct, sans avoir un journal passé-encore bien-ETags.

Je ne les vois pas comme un autre obsolète. Ils sont dans des situations différentes. Soit vous pouvez facilement obtenir une date de dernière mise à jour de toutes les données de la page que vous êtes sur le point de servir, ou vous pouvez facilement obtenir un ETag pour ce que vous servirez.

Si vous avez une page Web dynamique avec des données provenant de nombreuses recherches db il pourrait être difficile de dire ce que la date de dernière mise à jour est sans votre base de données contient beaucoup de dates de modification. Mais vous pouvez toujours faire une somme de contrôle md5 du résultat page rendue.

Quand charge ces protocoles de cache je vais certainement pour un seul d'entre eux, jamais les deux.

Autres conseils

Il y a une assez grande différence: je ne peux pas utiliser ETags si je l'ai déjà demandé au serveur pour un dans le passé. Timestamps, OTOH, je peux faire comme je vais le long.

simple raison:. Rétrocompatibilité

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