Cache-Verhalten bei Parameterübergabe

Guten Tag,

weiß jemand vielleicht, wie gängige Browser darauf reagieren, wenn ich ein Stylesheet oder ein Script mit einem Parameter anvisiere?

zb style.css?v=1

wird so etwas als “neue” Datei behandelt und dementsprechend neu geladen oder wird, weil es ja die selbe Datei ist, etwas aus dem Cache gezogen?

Der Parameter an sich ändert nichts, ich hatte nur die Idee, mit diesen die Browser auf eine neue Version “aufmerksam” zu machen.

MfG
Emil

Also
style.css
style.css?v=1
style.css?v=2
sind jeweils andere URIs. Sofern das Darstellungsprogramm die nicht schon im Speicher hat, erfolgt
da eine neue Nachfrage, anders als etwa bei style.css#dummy sofern style.css schon bekannt ist.
Der Kram hinter # ist für das Darstellungsprogramm gedacht, der Kram hinter ? für das
Dienstprogramm wie der Kram davor.
Das Darstellungsprogramm kann ja nicht beurteilen, was das Dienstprogramm mit dem
GET-Parameter anfängt - von daher stellt sich für das Darstellungsprogramm die Sinnfrage
gar nicht.
Somit müßtest du also immer einen anderen GET-Parameter(-Wert) anhängen, um das
garantiert neu zu bekommen.

Man kann das ausliefernde Dienstprogramm natürlich auch (etwa per PHP) dazu veranlassen,
in den Metainformationen in den Kopfdaten anzugeben, daß die Datei immer frisch geladen
werden soll, statt aus dem Speicher genommen zu werden. Dann braucht man auch keine neuen
GET-Parameter(-Werte) anhängen.

[quote]Man kann das ausliefernde Dienstprogramm natürlich auch (etwa per PHP) dazu veranlassen,
in den Metainformationen in den Kopfdaten anzugeben, daß die Datei immer frisch geladen
werden soll, statt aus dem Speicher genommen zu werden. Dann braucht man auch keine neuen
GET-Parameter(-Werte) anhängen.[/quote]
Das ist wohl richtig, allerdings ist das ja nur als “Empfehlung” zu betrachtet, niemand garantiert mir, dass sich alle Browser daran halten. Gibts überhaupt eine einheitliche Technik/Syntax dafür? Ein bestimmter Header, an den sich alle Browser halten?

Ich denke ein GET-Parameter ist für mich die bessere Option, da ich dann manuell festlegen kann, ab welchem Zeitpunkt Inhalte neu geladen werden müssen. Per Header etwa könnte ich nur sagen, alle 30 Tage oder so - Macht in meinem Zusammenhang keinen Sinn.

Danke!

Ich meine, das funktioniert bei den Programmen ganz gut.
Ist es bei PHP-Skripten nicht ohnehin so eingestellt, daß das Dienstprogramm immer in den
Kopfdaten sendet, das sei neu zu laden?

Ich meine, das ist auch in HTTP spezifiziert, wie man das machen muß.
Sinngemäßt die Eigenschaft ‘Expires’ mit einem Datum als Wert, leider allerdings in
irgendeinem amerikanischen Dialekt, nicht im internationalen Standard für die Angabe eines
Datums - immer wieder nervig, denn man muß den Wochentag nachsehen und die
Akürzung für den Monatsnamen, also sowas hier bei (X)HTML:

Per PHP sinngemäß (von mir nicht systematisch untersucht, was man wirklich braucht und was davon nur ‘Voodoo’ ist):

 header("Expires: Mon, 16 Oct 2006 00:00:00 GMT");    // Datum aus Vergangenheit
 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  // immer geändert
 header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
 header("Cache-Control: post-check=0, pre-check=0", false);
 header("Pragma: no-cache");                          // HTTP/1.0 

Mag aber sein, daß das eigentlich überflüssig ist bei PHP, wenn das da ohnehin gesendet
wird, müßte man man genau in den Tiefen der Konfiguration nachlesen.

Bislang habe ich zumindest noch nicht erlebt, daß ein Programm das ignoriert hätte -
aber wie immer ist natürlich nicht durchschaubar, was da warum implementiert wird oder
eben auch nicht. Nach meinen bisherigen reichhaltigen Diskussionen mit Leuten, die für
Implementierungen zuständig sind, gibt es da kein System. Und es ist auch nicht so relevant
was in Spezifikationen steht, die dieselben Leute nicht gerade selbst geschrieben haben ;o)
Von daher kann man sich auf nichts verlassen.
Wundersamer Weise funktioniert aber doch Vieles halbwegs so, daß man es irgendwie brauchen
kann ;o)