wake-up-neo.com

Was ist der Unterschied zwischen dem HTTP-Statuscode 200 (Cache) und dem Statuscode 304?

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

Von 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 mein 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 [~ # ~] :

Bei Verwendung von Google "Page Speed" erhalte ich ein "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 ich zwei JavaScript-Dateien im selben Verzeichnis/js/habe, von denen eine den http-Status 304 und die andere den Statuscode 200 (Cache) zurückgibt.

190
Hank

Die Elemente mit dem Code "200 (Cache)" wurden direkt aus Ihrem Browser-Cache erfüllt. Dies bedeutet, dass die ursprünglichen Anforderungen für die Elemente mit Kopfzeilen zurückgegeben wurden, die darauf hinweisen, dass der Browser sie zwischenspeichern kann (z. B. in die Zukunft datierte Expires oder Cache-Control: max-age headers) und dass diese zwischengespeicherten Objekte zu dem Zeitpunkt, als Sie die neue Anforderung auslösten, noch im lokalen Cache gespeichert waren und noch nicht abgelaufen waren.

304s hingegen sind die Antworten des Servers, nachdem der Browser überprüft hat, ob eine Datei seit der letzten zwischengespeicherten Version geändert wurde (die Antwort lautet "nein").

Um die bestmögliche Webleistung zu erzielen, legen Sie am besten eine ferne Zukunft fest. Expires: oder Cache-Control: max-age -Header für alle Assets und dann, wenn ein Asset geändert werden muss, Ändern des tatsächlichen Dateinamens des Assets oder Anhängen einer Versionszeichenfolge an Anforderungen für dieses Asset. Auf diese Weise muss keine Anforderung mehr gestellt werden, es sei denn, das Asset hat sich definitiv von der Version im Cache geändert (diese Antwort ist nicht erforderlich). Yahoo! hat mehr Cache-bezogene Leistungsrichtlinien , was beinhaltet, dass sichergestellt wird, dass ETags korrekt konfiguriert sind.

214
Ben Regenspan

200 (Cache) bedeutet, dass Firefox einfach die lokal zwischengespeicherte Version verwendet. Dies ist die schnellste Methode, da keine Anforderung an den Webserver erfolgt.

304 bedeutet, dass Firefox eine bedingte "If-Modified-Since" -Anforderung an den Webserver sendet. Wenn die Datei seit dem vom Browser gesendeten Datum nicht aktualisiert wurde, gibt der Webserver eine Antwort 304 zurück, die Firefox im Wesentlichen anweist, seine 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.

Zu Ihrer letzten Frage weiß ich nicht, warum die beiden JavaScript-Dateien im selben Verzeichnis unterschiedliche Ergebnisse liefern.

61
James Lawruk

Dies warf mich auch für eine lange Zeit. Das erste, was ich überprüfen würde, ist, dass Sie die Seite nicht neu laden, indem Sie auf die Schaltfläche "Aktualisieren" klicken. Dadurch wird immer eine bedingte Anforderung für Ressourcen ausgegeben und 304s für viele der Seitenelemente zurückgegeben. Wechseln Sie stattdessen zur URL-Leiste, wählen Sie die Seite aus und drücken Sie die Eingabetaste, als hätten Sie dieselbe URL erneut eingegeben. Dadurch erhalten Sie einen besseren Hinweis darauf, was ordnungsgemäß zwischengespeichert wird. In diesem Artikel wird der Unterschied zwischen bedingten und unbedingten Anforderungen und die Auswirkung der Schaltfläche "Aktualisieren" sehr gut erläutert: http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical- Informationen über bedingte http-Anforderungen und die Aktualisierung-button.aspx

18
Pooch

HTTP 304 wird "nicht geändert". Ihr Webserver teilt dem Browser im Wesentlichen mit, dass sich diese Datei seit Ihrer letzten Anfrage nicht geändert hat. Während ein HTTP 200 dem Browser mitteilt, dass "hier eine erfolgreiche Antwort vorliegt", sollte dies zurückgegeben werden, wenn der Browser zum ersten Mal auf die Datei zugreift oder wenn 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 .

8
richleland

304 ist unverändert. Ich bekomme diesen Code oft in meinen Mediendateien wie CSS und JS.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5

2
Brandon Henry

Für Ihre letzte Frage, warum? Ich werde versuchen, mit dem, was ich weiß, zu erklären

Eine kurze Erklärung dieser drei Statuscodes in Laienbegriffen.

  • 200 - Erfolg (Browser fordert an und holt Datei vom Server)

Wenn das Caching auf dem Server aktiviert ist

  • 200 (aus dem Speicher-Cache) - Datei wurde im Browser gefunden, sodass der Browser keine Anforderung vom Server erhält
  • 304 - Browser fordert eine Datei an, diese wird jedoch vom Server abgelehnt

Bei einigen Dateien entscheidet sich der Browser für eine Anforderung vom Server und bei einigen für das Lesen von gespeicherten (zwischengespeicherten) Dateien. Warum ist das ? Jede Datei hat also ein Ablaufdatum

Wenn eine Datei nicht abgelaufen ist, verwendet der Browser den Cache (200 Cache).

Wenn die Datei abgelaufen ist, fordert der Browser vom Server eine Datei an. Servercheckdatei 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.

schau dir diese Nginx-Konfiguration an

location / {
    add_header Cache-Control must-revalidate;
    expires     60;
    etag on;

    ...
}

Hier ist der Ablauf auf 60 Sekunden festgelegt, 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 würden Sie 200 erhalten (dh die aktualisierte Datei wird vom Server abgerufen).

Wenn die Server also mit unterschiedlichen Ablauf- und Caching-Headern (Richtlinien) konfiguriert sind, kann sich der Status unterscheiden.

In Ihrem Fall, dass Sie cdn verwenden, besteht der Hauptzweck von cdn in der hohen Verfügbarkeit und der schnellen Lieferung. Daher verwenden sie mehrere Server. Auch wenn es so aussieht, als ob sich Dateien in demselben 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.