J'utilise le plug-in "Page Speed" de Google pour Firefox pour accéder à mon site Web.
Certains des composants de ma page sont indiqués comme état HTTP:
200 200 (cache) 304
Par la "vitesse de la page" de Google.
Ce qui me dérange, c'est la différence entre 200 (cache) et 304.
J'ai rafraîchi la page plusieurs fois (mais je n'ai pas effacé mon cache) et il semble toujours que mon favicon.ico et quelques images sont status = 200 (cache) tandis que d'autres images ont le statut http 304.
Je ne comprends pas pourquoi la différence.
MISE À JOUR :
En utilisant Google "Page Speed", je reçois un "200 (cache)" pour http://example.com/favicon.ico ainsi que http://cdn.example.com/js/ga.js
Mais, je reçois un statut http "304" pour http://cdn.example.com/js/combined.min.js
Je ne comprends pas pourquoi j'ai deux fichiers JavaScript situés dans le même répertoire / js /, l'un renvoyant un état http 304 et l'autre renvoyant un code d'état 200 (cache).
max-age
-age
têtes et combinés peuvent également entraîner 200 résultats (cache) s'ilage
est inférieur àmax-age
. La seule exception est lorsque l'utilisateur clique sur le bouton d'actualisation du navigateur, auquel cas un en-tête 304 est envoyé.href
,url,
et lessrc
références à chaque fichier pour inclure une « empreinte » (soit un hachage du fichier ou un simple numéro incrémentée), puis dire au serveur pour enlever cette empreinte digitale et simplement servirstyle.css
ou autre chose. Si vous ne pouvez pas faire cela sur le serveur, demandez à votre système de génération de renommer les fichiers réels avec l'empreinte digitale.200 (cache) signifie que Firefox utilise simplement la version mise en cache localement. C'est le plus rapide car aucune demande au serveur Web n'est effectuée.
304 signifie que Firefox envoie une demande conditionnelle "If-Modified-Since" au serveur Web. Si le fichier n'a pas été mis à jour depuis la date d'envoi par le navigateur, le serveur Web renvoie une réponse 304 qui indique essentiellement à Firefox d'utiliser sa version mise en cache. Il n'est pas aussi rapide que 200 (cache) car la demande est toujours envoyée au serveur Web, mais le serveur n'a pas à envoyer le contenu du fichier.
Pour votre dernière question, je ne sais pas pourquoi les deux fichiers JavaScript dans le même répertoire retournent des résultats différents.
la source
Cela m'a aussi jeté longtemps. La première chose que je vérifierais est que vous ne rechargez pas la page en cliquant sur le bouton d'actualisation, qui émettra toujours une demande conditionnelle de ressources et renverra 304s pour de nombreux éléments de la page. Au lieu de cela, montez dans la barre d'URL, sélectionnez la page et appuyez sur Entrée comme si vous veniez de taper à nouveau la même URL, cela vous donnera un meilleur indicateur de ce qui est mis en cache correctement. Cet article explique très bien la différence entre les demandes conditionnelles et inconditionnelles et la façon dont le bouton d'actualisation les affecte: http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about- conditionnel-http-requests-and-the-refresh-button.aspx
la source
HTTP 304 n'est "pas modifié". Votre serveur Web indique au navigateur "ce fichier n'a pas changé depuis la dernière fois que vous l'avez demandé". Alors qu'un HTTP 200 indique au navigateur "voici une réponse réussie" - qui doit être renvoyée lorsque c'est la première fois que votre navigateur accède au fichier ou la première fois qu'une copie modifiée est accédée.
Pour plus d'informations sur les codes d'état, consultez http://en.wikipedia.org/wiki/List_of_HTTP_status_codes .
la source
Pour votre dernière question, pourquoi? Je vais essayer d'expliquer avec ce que je sais
Une brève explication de ces trois codes de statut en termes simples.
Si la mise en cache est activée sur le serveur
Pour certains fichiers, le navigateur décide de demander au serveur et pour certains, il décide de lire à partir des fichiers stockés (mis en cache). Pourquoi est-ce ? Chaque fichier a une date d'expiration, donc
Si un fichier n'est pas expiré, le navigateur utilisera le cache (200 cache).
Si le fichier a expiré, le navigateur demande au serveur un fichier. Fichier de vérification du serveur aux deux endroits (navigateur et serveur). Si le même fichier est trouvé, le serveur refuse la demande. Selon le protocole, le navigateur utilise le fichier existant.
regardez cette configuration nginx
Ici, l'expiration est définie sur 60 secondes, donc tous les fichiers statiques sont mis en cache pendant 60 secondes. Donc, si vous demandez à nouveau un fichier dans les 60 secondes, le navigateur lira de la mémoire (200 mémoires). Si vous demandez après 60 secondes, le navigateur demandera le serveur (304).
J'ai supposé que le fichier n'est pas modifié après 60 secondes, dans ce cas, vous en obtiendriez 200 (c'est-à-dire que le fichier mis à jour sera récupéré sur le serveur).
Par conséquent, si les serveurs sont configurés avec des en-têtes (stratégies) d'expiration et de mise en cache différents, l'état peut différer.
Dans votre cas, vous utilisez cdn, l'objectif principal de cdn est la haute disponibilité et la livraison rapide. Ils utilisent donc plusieurs serveurs. Même s'il semble que les fichiers se trouvent dans le même répertoire, cdn peut utiliser plusieurs serveurs pour fournir du contenu u, si ces serveurs ont des configurations différentes. Ces statuts peuvent alors changer. J'espère que ça aide.
la source