hawkmaster1: Proxy Cache

Hallo zusammen,

Eine Webanwendung läuft in einem Firmen Intranet. Der Browser braucht einen Proxyserver. Wenn man nun z.b. eine Seite "news.html" erneuert und diese auf den Webserver hochlädt, wird erst mal die alte Version angezeigt. Erst wenn man F5 drückt oder die Seite aktualisiert, wird der neue Inhalt angezeigt. Ich vermute mal das dies am Proxy Cache liegt? Die Frage an euch Experten: Soll man dieses Verhalten so lassen und hinnehmen oder sollte man besser mit diesen Header Einstzellungen den Cache ausschalten?

header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

Oder handelt man sich hier wiederum andere Probleme ein?

Gibt es noch andere Möglichkeiten?

vielen Dank und viele Grüße hawk

  1. Tach!

    Ich vermute mal das dies am Proxy Cache liegt?

    Ja, auch an dem des Browsers.

    Soll man dieses Verhalten so lassen und hinnehmen oder sollte man besser mit diesen Header Einstzellungen den Cache ausschalten?

    Kommt drauf an. Du solltest das so einstellen, wie es für deine Anwendung sinnvoll ist. Sich ständig aktualisierender Inhalt sollte gar nicht gecachet werden dürfen, oder nur sehr kurz. Sich nicht ändernde Ressourcen kannst du länger lagernd erlauben.

    Oder handelt man sich hier wiederum andere Probleme ein?

    Jeder Aufruf belastet natürlich den Server statt dass der Proxy befragt wird oder der Request gleich im Browser verbleibt.

    dedlfix.

    1. Hallo dedlfix, danke dir.

      Kommt drauf an. Du solltest das so einstellen, wie es für deine Anwendung sinnvoll ist. Sich ständig aktualisierender Inhalt sollte gar nicht gecachet werden dürfen, oder nur sehr kurz. Sich nicht ändernde Ressourcen kannst du länger lagernd erlauben.

      Hmm, aber die erwähnten Header Einstellungen macht man doch vermutlich nur einmal ganz am Anfang der Webseite. Man kann die Cache Einstellungen doch sicher nicht pro einzelne PHP Seite ändern oder?

      Ich finde es nicht mehr aber irgendwo sah ich mal eine Lösung wo man glaube ich hinter der Seite eine GET Variable mit einem Zufallswert wie ../news.php?wert=12345 angehängt hat Damit soll wohl dann auch immer die neueste Seite geladen werden weil ja die URL immer anders ist.

      Gruss hawk

      1. Tach!

        Hmm, aber die erwähnten Header Einstellungen macht man doch vermutlich nur einmal ganz am Anfang der Webseite. Man kann die Cache Einstellungen doch sicher nicht pro einzelne PHP Seite ändern oder?

        Jeder Request hat seine eigenen Header. Es gibt keine serverweiten Geschichten. Du kannst auch die Webseite an sich mit Nicht-Cachen-Headern ausliefern, die eingebetteten Ressourcen aber sehr wohl cachen lassen.

        Ich finde es nicht mehr aber irgendwo sah ich mal eine Lösung wo man glaube ich hinter der Seite eine GET Variable mit einem Zufallswert wie ../news.php?wert=12345 angehängt hat Damit soll wohl dann auch immer die neueste Seite geladen werden weil ja die URL immer anders ist.

        Ja, Timestamp anhängen ist sehr beliebt. Aber wenn du das immer und bei jedem Request nach dieser Ressource machst, kannst du gleich das Caching für diese verbieten.

        Das Problem ist obendrein, dass die geänderte URL auch zum Client finden muss. Wenn der sich die Seite mit dem Timestamp von gestern als Lesezeichen ablegt, hat er auch morgen immer noch die alte Seite, wenn die Cache-Header das erlaubt haben. URL ändern ist eher etwas für eingebettete Ressourcen, die eigentlich langfristig gecachet werden sollen, sich aber bei aktuellen Änderungen aktualisieren sollen. Das hauptsächlich abgefragte Dokument muss dabei weiterhin sehr kurzlebige Cache-Header haben. Für das kannst du die Anhängsel-Methode nicht verwenden.

        Weiterhin, so las ich irgendwo, ist es besser, den variablen Anteil der URL in den Pfad zu stecken und nicht als Querystring, weil letzteres unter Umständen doch wieder Probleme bereitet. Allerdings erfordert das ein serverseitiges Umschreiben der URL zum eigentlichen Ziel, wohingegen der Querystring zum Finden der auszuliefernden Ressource nicht herangezogen wird.

        dedlfix.

      2. Hallo

        Kommt drauf an. Du solltest das so einstellen, wie es für deine Anwendung sinnvoll ist. Sich ständig aktualisierender Inhalt sollte gar nicht gecachet werden dürfen, oder nur sehr kurz. Sich nicht ändernde Ressourcen kannst du länger lagernd erlauben.

        Hmm, aber die erwähnten Header Einstellungen macht man doch vermutlich nur einmal ganz am Anfang der Webseite. Man kann die Cache Einstellungen doch sicher nicht pro einzelne PHP Seite ändern oder?

        Natürlich nicht pro Zeile. Der Server liefert ein Dokument aus. Es ist nur logisch, die Cache-Einstellungen an das Dokument zu binden, wie es auch passiert. Du könntest jetzt also festlegen, CSS- oder JS-Dateien, Bilder und sich nicht oder nur selten ändernde Dokumente mit einer langen Cache-Zeit zu belegen, damit sie nicht andauernd vom Server ausgeliefert werden müssen, aus PHP-Skripten generierte Dokumente hingegen immer neu vom Server zu holen.

        Ich finde es nicht mehr aber irgendwo sah ich mal eine Lösung wo man glaube ich hinter der Seite eine GET Variable mit einem Zufallswert wie ../news.php?wert=12345 angehängt hat Damit soll wohl dann auch immer die neueste Seite geladen werden weil ja die URL immer anders ist.

        Ja. Allerdings würde ich davon ausgehen, dass die Standardvorgaben eines Webservers sowieso besagen, dass Objekte, die wegen ihrer Herkunft oder Endung vermuten lassen, dass sie dynamisch generiert, also dauernd geändert werden, nicht gecacht werden sollen.

        Tschö, Auge

        --
        Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
        Terry Pratchett, „Gevatter Tod“