Kann der Browser nicht einfach den Cache aus früheren Ajax-Aufrufen verwenden?

Ich versuche, mich auf den Browser-Cache zu verlassen, um JSON-Daten zu speichern, die von AJAX-Aufrufen in jQuery zurückgegeben wurden.

Die normale Browseraktivität hängt die ganze Zeit vom Browser-Cache ab. Beispiel: JPG- und GIF-Bilder werden beim erneuten Laden einer Seite nicht erneut abgerufen.

Aber wenn ich versuche, jQuery getJSON-Ajax-Aufrufe zu verwenden, kann ich es nicht vermeiden, die Daten vom Server abzurufen.

Meine zurückgegebenen Header sehen wie folgt aus (mit Firebug bestätigt):

Transfer-Encoding: chunked
Date: Wed, 05 Aug 2009 02:55:39 GMT
Content-Type: text/plain; charset=ISO-8859-1
Expires: Wed, 05 Aug 2009 03:55:39 GMT
Cache-Control: max-age=3600

Eine sofortige Aktualisierung der Seite führt jedoch dazu, dass identische Anforderungen auf den Server treffen.

Ich habe mehrere Posts über das Vermeiden von Caching-Verhalten gesehen, was ich nicht brauche. Ich habe mehrere Posts über die Verwendung von Caching gesehen, aber alle scheinen darauf zu beruhen, dass Daten im DOM gespeichert werden. Ich möchte etwas, das sich genauso verhält wie zwischengespeicherte Bilder beim Neuladen einer Seite.

Kann der Browser es nicht einfach aus dem eigenen Cache holen?

--x - x - x - x AKTUALISIEREN --x - x - x--

Sehr zu meiner Enttäuschung sind sich mehrere angesehene Leute einig, dass dies nicht nur möglich ist. Einige argumentieren sogar, dass es nicht sein sollte (was mich immer noch verblüfft).

Stubburn zu einem Fehler, ich habe Folgendes versucht:

Ich setze den Etag-Header auf allen ausgehenden Seiten, die zwischengespeichert werden sollen. (Ich wähle einige ausgewählte URL-Argumente aus, die die von mir angeforderten Daten darstellen, und verwende diese nur für den Etag-Wert.)

Zu Beginn der nächsten Anfrage überprüfe ich einfach, ob der Header "If-None-Match" in der Anfrage enthalten ist. In diesem Fall speichert der Browser die Anforderung nicht wie gewünscht im Cache, sodass ich eine Antwort 304 Not Modified gesendet habe.

Tests haben ergeben, dass Firefox meine Anfrage nicht zwischenspeichert (aber ich kann trotzdem den Teil "Holen Sie sich die teuren Daten" in meinem CGI vermeiden), während IE6 sie tatsächlich zwischenspeichert (und nicht einmal versucht, sie vom Server zurückzurufen).

Es ist keine schöne Antwort, aber es funktioniert für mich im Moment
(Diese pestigen ganzseitigen Aktualisierungen von Diagrammdaten werden jetzt nicht mehr so ​​langsam oder so teuer sein).

(Was? Ich lasse IE6 laufen! OMG! Oh schau ein Eichhörnchen!)

Antworten auf die Frage(5)

Ihre Antwort auf die Frage