web-dev-qa-db-fra.com

304 non modifié avec 200 (du cache)

J'essaie de comprendre quelle est exactement la différence entre "statut 304 non modifié" et "200 (à partir du cache)" Here is the screenshot

Je reçois 304 fichiers javascript que j'ai modifiés en dernier. Pourquoi cela se produit-il? Merci de votre aide.

23
Boltosaurus

https://sookocheff.com/post/api/effective-caching/ est une excellente source pour la compréhension requise autour de ces 2 codes de statut HTTP.

Après avoir lu ceci à fond, j'ai eu cette compréhension

En utilisation typique, lorsqu'une URL est récupérée, le serveur Web renvoie la représentation actuelle de la ressource ainsi que sa valeur ETag correspondante, qui est placée dans un champ "ETag" d'en-tête de réponse HTTP. Le client peut alors décider de mettre en cache la représentation, ainsi que son ETag. Par la suite, si le client souhaite récupérer à nouveau la même ressource URL, il déterminera tout d'abord si la version en cache locale de l'URL a expiré (via les en-têtes Cache-Control et Expire). Si l'URL n'a pas expiré, il récupérera la ressource en cache locale. S'il a déterminé que l'URL a expiré (est obsolète), le client contacte le serveur et envoie sa copie précédemment sauvegardée de l'ETag avec la demande dans un champ "If-None-Match". (Source: https://en.wikipedia.org/wiki/HTTP_ETag

Mais même lorsque le délai d'expiration d'un actif est défini à l'avenir, le navigateur peut toujours atteindre le serveur pour un GET conditionnel utilisant ETag conformément à l'en-tête 'Vary'. Détails sur l'en-tête 'varie': https://www.fastly.com/blog/best-practices-using-vary-header/

3
gargkshitiz

"200 (à partir du cache)" signifie que le navigateur a trouvé une réponse mise en cache pour la demande effectuée. Ainsi, au lieu de faire un appel réseau pour récupérer cette ressource sur le serveur distant, il a simplement utilisé la réponse mise en cache. 

Maintenant, ces réponses en cache ont une durée de vie qui leur est associée. Avec le temps, les réponses peuvent devenir obsolètes. Et si elles ne sont pas autorisées à être servies périmées (voir section 4.2.4 - RFC7234 ), le navigateur doit contacter le serveur distant et vérifier si ces réponses en cache sont toujours valides ou non. Le code d'état de la réponse 304 permet aux serveurs de faire savoir au navigateur que la réponse n'a pas changé et qu'elle est toujours valide. 

Si le navigateur reçoit une réponse 304, il peut "rafraîchir" la ou les réponses obsolètes pertinentes. Les requêtes suivantes adressées à la ressource peuvent à nouveau être servies à partir de la mémoire cache du navigateur sans vérification auprès du serveur distant (jusqu'à ce que la réponse redevienne obsolète).

0
Pubudu