Ich verwende das Google-Plug-In "Page Speed" für Firefox, um auf meine Website zuzugreifen.
Einige der Komponenten auf meiner Seite werden als HTTP-Status angezeigt:
200 200 (Cache) 304
Mit Googles "Seitengeschwindigkeit".
Was mich verwirrt, ist der Unterschied zwischen 200 (Cache) und 304.
Ich habe die Seite mehrmals aktualisiert (aber meinen Cache nicht geleert) und es scheint immer, dass meine favicon.ico und einige Bilder den Status = 200 (Cache) haben, während einige andere Bilder den http-Status 304 haben.
Ich verstehe nicht warum der Unterschied.
UPDATE :
Mit Google "Page Speed" erhalte ich eine "200 (Cache)" für http://example.com/favicon.ico sowie http://cdn.example.com/js/ga.js
Ich erhalte jedoch den http-Status "304" für http://cdn.example.com/js/combined.min.js
Ich verstehe nicht, warum sich zwei JavaScript-Dateien im selben Verzeichnis / js / befinden, von denen eine einen http-Status 304 und die andere einen 200-Statuscode (Cache) zurückgibt.
max-age
undage
-Header zusammen können auch zu 200 (Cache-) Ergebnissen führen, wenn sieage
kleiner als sindmax-age
. Die einzige Ausnahme ist, wenn der Benutzer auf die Schaltfläche zum Aktualisieren des Browsers klickt. In diesem Fall wird ein 304-Header gesendet.href
, dass sie einen 'Fingerabdruck' (entweder einen Hash der Datei oder eine einfache inkrementierte Nummer) enthalten, und dies dann dem Server mitzuteilen diesen Fingerabdruck abziehen und einfach dienen oder was auch immer. Wenn Sie dies auf dem Server nicht tun können, lassen Sie Ihr Build-System die tatsächlichen Dateien mit dem Fingerabdruck umbenennen.url,
src
style.css
200 (Cache) bedeutet, dass Firefox einfach die lokal zwischengespeicherte Version verwendet. Dies ist die schnellste, da keine Anforderung an den Webserver erfolgt.
304 bedeutet, dass Firefox eine bedingte Anforderung "If-Modified-Since" an den Webserver sendet. Wenn die Datei seit dem vom Browser gesendeten Datum nicht aktualisiert wurde, gibt der Webserver eine 304-Antwort zurück, die Firefox im Wesentlichen anweist, die zwischengespeicherte Version zu verwenden. Es ist nicht so schnell wie 200 (Cache), da die Anforderung weiterhin an den Webserver gesendet wird, der Server jedoch den Inhalt der Datei nicht senden muss.
Auf Ihre letzte Frage weiß ich nicht, warum die beiden JavaScript-Dateien im selben Verzeichnis unterschiedliche Ergebnisse liefern.
quelle
Das hat mich auch lange geworfen. Das erste, was ich überprüfen würde, ist, dass Sie die Seite nicht neu laden, indem Sie auf die Schaltfläche "Aktualisieren" klicken. Dies gibt immer eine bedingte Anforderung für Ressourcen aus und gibt 304s für viele der Seitenelemente zurück. Gehen Sie stattdessen zur URL-Leiste, wählen Sie die Seite aus und drücken Sie die Eingabetaste, als hätten Sie gerade dieselbe URL erneut eingegeben. Dadurch erhalten Sie einen besseren Indikator dafür, was ordnungsgemäß zwischengespeichert wird. Dieser Artikel erklärt hervorragend den Unterschied zwischen bedingten und bedingungslosen Anforderungen und wie sich die Schaltfläche "Aktualisieren" auf sie auswirkt: http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about- Bedingte-http-Anfragen-und-die-Aktualisierung-button.aspx
quelle
HTTP 304 ist "nicht geändert". Ihr Webserver teilt dem Browser im Grunde mit, dass sich diese Datei seit der letzten Anforderung nicht geändert hat. Während ein HTTP 200 dem Browser mitteilt, dass "hier eine erfolgreiche Antwort vorliegt", sollte diese zurückgegeben werden, wenn Ihr Browser entweder zum ersten Mal auf die Datei zugreift oder zum ersten Mal auf eine geänderte Kopie zugegriffen wird.
Weitere Informationen zu Statuscodes finden Sie unter http://en.wikipedia.org/wiki/List_of_HTTP_status_codes .
quelle
Für Ihre letzte Frage, warum? Ich werde versuchen, mit dem zu erklären, was ich weiß
Eine kurze Erklärung dieser drei Statuscodes in Laienbegriffen.
Wenn das Caching auf dem Server aktiviert ist
Bei einigen Dateien entscheidet sich der Browser für eine Anforderung vom Server und bei einigen für das Lesen aus gespeicherten (zwischengespeicherten) Dateien. Warum ist das ? Jede Datei hat also ein Ablaufdatum
Wenn eine Datei nicht abgelaufen ist, verwendet der Browser aus dem Cache (200 Cache).
Wenn die Datei abgelaufen ist, fordert der Browser den Server nach einer Datei an. Serverprüfdatei an beiden Stellen (Browser und Server). Wenn dieselbe Datei gefunden wird, lehnt der Server die Anforderung ab. Gemäß Protokoll verwendet der Browser die vorhandene Datei.
Schauen Sie sich diese Nginx-Konfiguration an
Hier ist der Ablauf auf 60 Sekunden eingestellt, sodass alle statischen Dateien für 60 Sekunden zwischengespeichert werden. Wenn Sie also innerhalb von 60 Sekunden erneut eine Datei anfordern, liest der Browser aus dem Speicher (200 Speicher). Wenn Sie nach 60 Sekunden eine Anfrage stellen, fordert der Browser den Server an (304).
Ich nahm an, dass die Datei nach 60 Sekunden nicht geändert wird. In diesem Fall erhalten Sie 200 (dh die aktualisierte Datei wird vom Server abgerufen).
Wenn die Server mit unterschiedlichen ablaufenden und zwischengespeicherten Headern (Richtlinien) konfiguriert sind, kann sich der Status unterscheiden.
In Ihrem Fall, in dem Sie cdn verwenden, ist der Hauptzweck von cdn die hohe Verfügbarkeit und die schnelle Lieferung. Daher verwenden sie mehrere Server. Obwohl sich Dateien anscheinend im selben Verzeichnis befinden, verwendet cdn möglicherweise mehrere Server, um u-Inhalte bereitzustellen, wenn diese Server unterschiedliche Konfigurationen haben. Dann kann sich dieser Status ändern. Ich hoffe es hilft.
quelle