Rolf B: Ajax liefert nicht den aktuellen Dateiinhalt

Beitrag lesen

Hallo alle,

in dem Zusammenhang eine total blöde Story. Soeben erlebt.

Ich wollte mit das Verhalten von fetch beim Caching anschauen. Nun habe ich hier auf meinem Windows PC keinen Apache, aber einen IIS 10. Und natürlich kann ich dagegen auch Webrequests absetzen.

Ich lade eine data.txt Datei, via Fetch. Oder via XMLHttpRequest. Das ist egal.

Um das Caching zu steuern, habe ich im IIS die Ausgabezwischenspeicherung für .txt Dateien auf 30 Minuten eingestellt. Und die Folge? Der bescheuerte IIS haut mir mit Freude in jede Response für .txt Dateien ein no-cache in den Cache-Control Header. Folgerequeste an den Server beantwortet er brav mit HTTP 304 - not changed. Aber der Browser cached nix, und ich habe natürlich keine Möglichkeit, mich mit dem Thema browserseitiges Caching zu befassen, wie ich eigentlich wollte.

Nach 2 Stunden Suche mit den falschen Begriffen weiß ich's nun: der IIS kennt mehr Optionen als sein GUI, man muss die Config-Datei manuell editieren und eine Cache-Location setzen. Default ist: Nur auf dem Server, und das ist das, was das UI da einsetzt. Setzt man "Client", cached nur der Client. Oder "Any", dann kann die Datei überall gecached werden.

Warum erzähl ich das? Möglicherweise gibt es für den Apache ähnliche Einstellungen. Verbiete clientseitiges Caching, aber liefere HTTP 304, solange die Datei unverändert ist. Sobald sich was verändert, merkt das der IIS und liefert HTTP 200, in den Folgeanforderungen wieder 304. Ein Cache-Buster ist dann nicht erforderlich, das ist eigentlich nur ein Hack. Ich werde allerdings aus der Apache Doku auf die schnelle nicht schlau, ob man ihm das konfigurativ beibringen kann.

Rolf

--
sumpsi - posui - obstruxi