wahsaga: HTTP HEAD und Last-Modified

Beitrag lesen

hi,

Will sagen: Welche Aussagekraft willst du diesem Script zumessen?

Es zeigt alle angelieferten Request-Header an. Bei meinem Opera folgende Header aber _nicht_ gesenden:

[HTTP_IF_MODIFIED_SINCE] => Thu, 09 Mar 2006 17:27:56 GMT
    [HTTP_IF_NONE_MATCH] => "1b-40e93326f9f00"

Warum sollte er auch?

Erste Anforderung des Scriptes, mein Browser kennt die Ressource noch gar nicht - kein Grund für ein Conditional GET.

OK, zweite Anforderung des Scriptes - ja, jetzt sollte der Browser mindestens einen der Request-Header für ein Conditional GET mitschicken - tut er aber, wie gesagt, eben nicht, wenn ich die Ressouce über [F5] erneut anfordere - weil er dann davon ausgehen darf, dass ich sie wirklich auf jeden Fall neu geladen haben möchte.

Da käme jetzt in meinem Beispiel der Link auf die Ressource ins Spiel - der erfordert keinen expliziten Reload.
Also schaut mein Browser nach - "hab ich die Seite noch im Cache? Ja, hab ich - also mach' ich mal einen Conditional GET, um mich zu erkundigen, ob sie noch aktuell ist."
_Hier_ käme jetzt der 304 ins Spiel.

Und da liegt der Knackpunkt, warum du mit deinem Beispielscript nicht nachvollziehen können wirst, ob der Browser das korrekt implementiert hat, oder nicht:

Macht mein Browser keinen Conditional GET, weil ich wie oben beschrieben explizit ein neu laden der Ressource angefordert habe - dann bekommst du keinen If-Modified-Since- oder If-None-Match-Header in der Ausgabe deines Scriptes zu sehen - die wären für den Reload fehl am Platze, dürften hier gar nicht auftauchen.

Macht mein Browser hingegen einen Conditional GET, und dein Script behandelt diesen korrekt - in dem es eben mit 304 antwortet - dann werden wir die entsprechenden Header in der Ausgabe deines Scriptes trotzdem nicht zu Gesicht bekommen. Eben _weil_ der Browser das Dokument ja gar nicht neu anfordert, sondern jetzt wieder die zuerst - _ohne_ Conditional GET - angeforderte Version des Dokumentes, die sich noch in seinem Cache befindet, erneut anzeigen wird.

_Eben deshalb_ habe ich ja bei meinem Testbeispiel zur Kontrolle die Session verwendet, deren aktuelle Werte ich mir über ein zweites Script unabhängig von diesem Request anzeigen lassen kann.

Es wäre ja ein Widerspruch in sich, wenn dein Server mir einerseits mit einem 304 Not Modified antworten, und mir _gleichzeitig_ aber aktualisierte Daten - eben die aktualisierte Kontrollausgabe der Header des Conditional GET-Requests - übermitteln wollen würde.

Nicht umsonst verlangt HTTP ja auch an dieser Stelle, dass die 304-Antwort keinen Message Body enthalten darf, weil das widersinnig wäre:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5:

The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }