Tino23: no Cache

Hi
Wann setze ich welchen Befehl sinnvoll ein und muss ich dann diese Befehle
auf jede Seite einbinden, oder reicht es aus, wenn ich den Befehl nur auf
der Index-Seite einbinde? Gibt es nicht einen Befehl, der die Seite im
Cache mit der originalem im Web. Vergleicht, und bei Veränderrungen, dann
diese Seite neu lädt? Ist nämlich sonnt etwas unpraktisch, wenn ich dies
Befehle in eine Seite einbinde, wo viele Bilder enthalten sind, da diese
dann immer neu geladen werden. Was passiert wenn ich diesen Befehl auf
einer Seite, die nur Framesets enthält, einsetze?

<meta http-equiv="cache-control" content="no-cache">
Anweisung an den Browser: keinen Cache benutzen, sondern von Originalseite
laden.

<meta http-equiv="pragma" content="no-cache">
An Proxy-Agenten: Datei bitte nicht auf Proxy-Server speichern!

  1. Hi
    Wann setze ich welchen Befehl sinnvoll ein und muss ich dann diese Befehle
    auf jede Seite einbinden, oder reicht es aus, wenn ich den Befehl nur auf
    der Index-Seite einbinde?

    Du setzt sie dann sinnvoll ein, wenn du dynamische Seiten hast, deren Inhalt sich schnell verändert, also beispielsweise eine Zeitanzeige. ;) Oder die Anzeige von Usern, die online sind. Oder Ergebnisseiten von Formulareingaben (wer das Formular mehrfach ausfüllt, sollte jeweils eine aktuelle Ergebnisseite erhalten, nicht die alte mit den alten Daten).

    Meist ist es für Seiten aber absolut ok, wenn sie im Cache landen und von dort geladen werden. Für Bilder gelten diese Angaben AFAIK nicht.

    Gibt es nicht einen Befehl, der die Seite im
    Cache mit der originalem im Web. Vergleicht, und bei Veränderrungen, dann
    diese Seite neu lädt?

    Das machen die Browser dann, wenn eingestellt ist, daß sie bei jedem Seitenanzeigen die Aktualität der Seite prüfen sollen.

    Beim IE: Extras -> Internetoptionen... -> Allgemein -> Temporäre Internetdateien -> Einstellungen... -> (X) Bei jedem Zugriff auf die Seite

    Für dich beim Seitenentwickeln ist diese Einstellung besser. Der Browser lädt dann normalerweise immer gleich die Änderungen, die du im Editor abspeicherst. Für normale Surfer mit Modem ist die Standardeinstellung besser, weil das Seitenladen dann völlig ohne Kommunikation mit dem Server funktioniert, sofern die Cachedaten noch nicht abgelaufen sind.

    - Sven Rautenberg

  2. Hi auch,

    Wann setze ich welchen Befehl sinnvoll ein und muss ich dann diese Befehle
    auf jede Seite einbinden, oder reicht es aus, wenn ich den Befehl nur auf
    der Index-Seite einbinde?

    "Eigentlich" ist keiner dieser Befehle in der Form, wie Du ihn angegeben
    hast, eine "schöne" Lösung.

    Die Probleme dabei hast Du selbst bereits erkannt:
    1. es müßte in jeder Datei stehen.
    2. insbesondere auch in Dateien, in denen es gar nicht drin stehen darf
       (Bilder etc.).

    Gibt es nicht einen Befehl, der die Seite im Cache mit der originalem
    im Web. Vergleicht, und bei Veränderrungen, dann diese Seite neu lädt?

    "Einen Befehl"? Nein. Aber dies zu erledigen ist Aufgabe des Browsers, und
    er tut das in Abhängigkeit von vielen verschiedenen Parametern. Zu diesen
    gehören u. a.

    • die in seiner Konfiguration eingestellte Caching-Strategie,
    • ggf. das "Alter" der in seinem Cache vorliegenden Datei sowie
    • weiteren Informationen, die er vom Webserver im HTTP-Header erhalten hat.

    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="pragma" content="no-cache">

    Wie die Namen dieser Tags ja bereits aussagen, versucht HTML an dieser
    Stelle, dem Browser zu sagen, er solle sich so verhalten, als habe er beim
    Empfang des HTML-Dokuments zusätzlich im HTTP-Header, der "Verpackung" der
    Seite, auch diese Informationen erhalten. Bei der Übertragung etwa eines
    Bildes kannst Du mit diesem Trick nicht arbeiten, und bei HTML-Dokumenten
    solltest Du es auch nicht tun. Deine HTML-Dokumente sollten sich mit ihrem
    Inhalt befassen und nicht mit Details der zu verwendenden Übertragungsmoda-
    litäten - das ist einfach nicht ihr Job.
    Der Grund, weshalb solche Sprachelemente überhaupt Einzug in HTML gefunden
    haben, ist meiner Meinung nach einzig derjenige, daß eben nicht jeder Sei-
    tenbastler seinen eigenen Webserver konfigurieren darf. Wir sind heute aber
    dieser Vorstellung wesentlich nähergekommen als noch vor 1-2 Jahren.

    Du schreibst ja auch nicht in jedes HTML-Dokument hinein, daß es den
    Content-type "text/html" hat, richtig? Aber bevor der Browser sich dafür
    entscheidet, den Inhalt Deines HTML-Dokuments nach tags zu durchsuchen
    und diese im Sinne von HTML zu interpretieren, muß ihn normalerweise [1]
    vorher jemand darauf aufmerksam gemacht haben. Auch das ist ein HTTP-Header.
    Welchen HTTP-Header für den Content-type Dein Server an den Browser sendet,
    das stellst Du in Konfiguration des Webservers ein. Genauso kannst Du dort
    für bestimmte Gruppen, Namensmuster, Teilbäume oder was auch immer einstel-
    len, daß bestimmte weitere HTTP-Header mitgeschickt werden sollen - bei-
    spielsweise eben auch solche, die das Verhalten diverser Caches beeinflus-
    sen.
    Würden Deine nicht-cachebaren Dateien direkt von einem CGI-Programm gene-
    riert werden, dann wäre es sinnvollerweise die Aufgabe dieses Programms,
    die entsprechenden Header zu generieren. Falls Du aber beispielsweise
    Content auf dem Server generierst und in Form statischer HTML-Dokumente
    ablegst, deren Inhalt sich aber ändern kann (das machen einige Web-Foren
    beispielsweise so), dann hilft am ehesten, für diese Dateien durch den
    Webserver entsprechende Header generieren und mitsenden zu lassen.

    Viele Grüße
          Michael

    [1] ausgenommen den M$IE, der mit obskurem Voodoo selbst herauszufinden
        versucht, wie er den Betrachter Deiner Seite durch hohnlachendes Igno-
        rieren des von Deinem Server selbstverständlich korrekt gelieferten
        Content-type am besten schikanieren kann.