ChrisB: If-Modified-Since und SEO

Beitrag lesen

Hi,

Konkret verstehe ich das so:

UA(egal) steckt in den Request-Header die Frage:
"If-Modified-Since: date_time_x"
wobei date_time_x das Datum+Uhrzeit ist, was UA im Cache hat, weil UA die Seite schonmal requestet hat vor einiger Zeit.

Der Webserver, der das unterstützt, schreibt in den Header:
"Last Modified: date_time_y"

Ja, nur eben "anders herum".

Der Server hat die Ressource bei der ersten Anfrage durch den Client mit einem Last-Modified-Header (neben ggf. weiteren das Caching beeinflussenden) ausgeliefert.

Der Nutzer fordert die Seite jetzt erneut an; Client schaut in seinen Cache und merkt, die hab' ich eigentlich schon. Also frag ich mal beim Server nach, ob die sich inzwischen geändert hat - dazu dient If-Modified-Since:
"Hey Server, mein Nutzer interessiert sich für Ressource /XY, aber ich hab da noch eine Version in meinem Cache liegen, von der du mir gesagt hast, dass sie am 18.7.2009 um 17:03:47 Uhr zuletzt geändert wurde. Hat die sich inzwischen geändert? Wenn nein, sag bitte nur kurz Bescheid [304 Not Modified], dann zeig ich dem Typ vorm Bildschirm einfach die Version, die ich noch auf Halde liegen habe, merkt der Pinsel doch eh nich'. Falls du aber was neues hast, dann lass das gleich mal rüberwachsen."

wobei er für y das Dateidatum nimmt, sofern es eine HTML-Datei ist, die direkt aus dem Dateisystem gezogen wird. Wurde jedoch ein CGI-Script requestet, was zur Laufzeit erzeugt wurde, ist dieses Header-Field nicht vorhanden (dynamischer Content).

Das liegt am Server/Script, wie er/es den Zeitpunkt der letzten Änderung ermitteln will (oder auch nicht).
Last-Modified enthält bei Dateien in der Regel wirklich nur den letzten Änderungszeitpunkt, den das Dateisystem hergibt. (Beim ETag ist das anders, da fliessen per Default noch Sachen wie der INode etc. mit ein.)

Aber natürlich kann ein Script, was Daten bspw. aus einer Datenbank ausliest und darüber idealerweise ebenfalls einen letzten Änderungszeitpunkt zur Verfügung hat, natürlich auch entsprechende Angaben an den Client senden und Requests nach noch nicht "veralteten" Ressourcen mit einem 304 beantworten, um Traffic zu sparen. Nur muss man das bei Scripten i.a.R. selber implementieren.

MfG ChrisB

--
Light travels faster than sound - that's why most people appear bright until you hear them speak.