Jerry: IE 6 caching funktioniert nicht???

Hallo,

seit kurzem stelle ich fest, daß der IE 6 ständig Seiten neu lädt,
auch wenn diese sich nicht verändert haben.

Normalerweise liefert Askemos (www.askemos.org) Seiten, die dynamisch
generiert sind mit:

Pragma: no-cache
Cache-Control: no-cache

was für statische Seiten weggelassen wird.
Bislang hat das erfolgreich funktioniert, aber seit IE6 werden
die Seiten sinnloserweise erneut geladen.

Jeder Hinweis ist Gold wert.  Danke

/Jerry

  1. Hi,

    seit kurzem stelle ich fest, daß der IE 6 ständig
    Seiten neu lädt, auch wenn diese sich nicht
    verändert haben.

    :-))) So weit war ich vor ein paar Stunden auch ... (viel anders außer HTTP-Header-Basteln habe ich heute nicht gemacht)

    Pragma: no-cache
    Cache-Control: no-cache
    was für statische Seiten weggelassen wird.

    Du kannst viel mehr tun als "weglassen", nämlich den Client aktiv zum Cachen auffordern:

    HTTP/1.1:    Cache-Control: public,max-age=<sekunden>
    HTTP/1.0:    Expires: <datum_im_format_von_RFC1123>

    Lesetips: Apache / mod_expires und mod_headers, Direktive "<FilesMatch>" - und den HTTP-Header "Vary:" mal bei Gelegenheit im RFC2616 ansehen ... (nur damit Du weißt, was alles auf Dich zukommen könnte, wenn 'richtig' gecached werden soll)

    Bislang hat das erfolgreich funktioniert, aber seit
    IE6 werden die Seiten sinnloserweise erneut geladen.

    Läßt Du den M$IE im HTTP/1.0- oder 1.1-Modus laufen?
    "Cache-Control" ist 1.1 (und soll laut Definition bei 1.1-fähigen Caches vorrang haben vor "Expires") ... aber "Expires" könnte ihm vielleicht im 1.0-Modus entscheidend helfen.

    Viele Grüße
          Michael

    P.S.: Bei mir war es ein Formular-Submit via JavaScript-Code, was das Caching kaputt machte - das ließ sich aber passend umschreiben.
    Bei Mozilla ist übrigens ein GET wesentlich besser cacheable als ein PUT mit ansonsten gleichen Parametern ... und bei Netscape 4 overruled ein zweite "Expires:" das erste und ein "Expires" mit Datum in der Zukunft sogar ein "Pragma: no-cache" ... was es nicht alles gibt.

    1. seit kurzem stelle ich fest, daß der IE 6 ständig
      Seiten neu lädt, auch wenn diese sich nicht
      verändert haben.

      :-))) So weit war ich vor ein paar Stunden auch ... (viel anders außer HTTP-Header-Basteln habe ich heute nicht gemacht)

      Geteiltes Leid? ;)  Danke für die Tips.
      ...

      was für statische Seiten weggelassen wird.
      Du kannst viel mehr tun als "weglassen", nämlich den Client aktiv zum Cachen auffordern:

      ^^^^^^

      Ich würde mich allerdings gerne mit dem notwendigen Minimum zufrieden geben.

      HTTP/1.1:    Cache-Control: public,max-age=<sekunden>
      HTTP/1.0:    Expires: <datum_im_format_von_RFC1123>

      Och nö, jetzt muß ich auch noch auf's Protokoll achten.

      Lesetips: ... HTTP-Header "Vary:" mal bei Gelegenheit im RFC2616 ansehen ... (nur damit Du weißt, was alles auf Dich zukommen könnte, wenn 'richtig' gecached werden soll)

      Ja, der 2616; danach hatte ich schon mit Expires experimentiert,
      was aber auch nichts brachte.  Allerdings hab' ich auch kein 'Date:'
      angegeben gehabt - wäre das evtl. fatal?

      Vary hatte ich gar nicht beachtet.  Wie bekomme ich eigentlich heraus,
      welche der beiden großen Browser welche Header wie beachten?
      gibt es da Quellen?

      Läßt Du den M$IE im HTTP/1.0- oder 1.1-Modus laufen?

      Hm.  Dummerweise loge ich nicht alles.  Und IE hab' ich selbst gar nicht.
      Allerdings *muß* es mit beiden Varianten gehen.  Ich kann den Leuten ja nicht den Browser verstellen gehen.

      Ciao
      /Jerry

      1. Hi,

        HTTP/1.1:    Cache-Control: public,max-age=<sekunden>
        HTTP/1.0:    Expires: <datum_im_format_von_RFC1123>
        Och nö, jetzt muß ich auch noch auf's Protokoll achten.

        Mußt Du nicht.

        • HTTP/1.0-Clients verstehen nur "Expires:";
        • HTTP/1.1-Clients verstehen beides,
            aber "Cache-Control:" hat Vorrang.

        Du kannst also problemlos _beides_ senden - wenn Du willst, sogar mit unterschiedlichen Werten. (Beispielsweise einem HTTP/1.0-Proxy das Cachen verbieten und einem HTTP/1.1-Proxy es erlauben, weil der dann hoffentlich auch mit "Vary:" umgehen kann ...)

        Ja, der 2616; danach hatte ich schon mit Expires
        experimentiert, was aber auch nichts brachte.
        Allerdings hab' ich auch kein 'Date:'
        angegeben gehabt - wäre das evtl. fatal?

        Bei mir ergänzt der Apache das doch automatisch ... ?

        Wie bekomme ich eigentlich heraus, welche der beiden
        großen Browser

        Opera und Mozilla? ;-)))

        welche Header wie beachten?

        Ausprobieren.

        Im Modus "Kristallkugel" war ich nach der Erzeugung von "Cache-control:" mit den Ergebnissen recht zufrieden.

        Läßt Du den M$IE im HTTP/1.0- oder 1.1-Modus laufen?
        Hm. Dummerweise loge ich nicht alles.

        Der HTTP-Level steht aber doch schon im Request drin -
        also im Standard-Apache-Log-Format.

        Allerdings *muß* es mit beiden Varianten gehen.

        Deshalb beide Header senden (siehe oben).

        Ich kann den Leuten ja nicht den Browser verstellen
        gehen.

        Ich versuche es. ;-)

        Und IE hab' ich selbst gar nicht.

        Hättest Du einen, dann würde ich Dich auf eine solche Seite schicken ...

        Viele Grüße
              Michael

  2. Hallo,

    seit kurzem stelle ich fest, daß der IE 6 ständig Seiten neu lädt,
    auch wenn diese sich nicht verändert haben.

    Normalerweise liefert Askemos (www.askemos.org) Seiten, die dynamisch
    generiert sind mit:

    Pragma: no-cache
    Cache-Control: no-cache

    was für statische Seiten weggelassen wird.
    Bislang hat das erfolgreich funktioniert, aber seit IE6 werden
    die Seiten sinnloserweise erneut geladen.

    Ich hatte gerade ein aehnliches Problem mit Server-seitig generierten SVG-Dokumenten, die im IE jeweils noch im Cache waren.

    Sendet man z. B. mit PHP die entsprechenden Header, klappt es eigentlich ueberall, außer im IE:

    <?php
    Header("Cache-control: private, no-cache, must-revalidate");
    Header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
    Header("Date: Sat, 01 Jan 2000 00:00:00 GMT");
    Header("Pragma: no-cache");
    ?>

    Fuer den IE kann man im HEAD noch diese META-Tags hinzufuegen:

    <meta http-equiv="expires" content="Sat, 01 Jan 2000 00:00:00 GMT">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="pragma" content="no-cache">

    In dieser Kombination kommen meine Grafiken jetzt immer aktuell.

    MfG, Thomas

    1. Hi Thomas,

      seit kurzem stelle ich fest, daß der IE 6 ständig
      Seiten neu lädt, auch wenn diese sich nicht
      verändert haben.

      Ich hatte gerade ein aehnliches Problem mit Server-
      seitig generierten SVG-Dokumenten, die im IE jeweils
      noch im Cache waren.

      kann es sein, daß Du das exakte Gegenteil von dem erklärt hast, was Jerry eigentlich wollte?

      Ich hatte den Eindruck, er will _mehr_ cachen, nicht _weniger_ ...

      Viele Grüße
            Michael

      1. Hallo,

        kann es sein, daß Du das exakte Gegenteil von dem erklärt hast, was Jerry eigentlich wollte?

        Stimmt. Sorry.

        Ich hatte den Eindruck, er will _mehr_ cachen, nicht _weniger_ ...

        Ja und dann hast Du das wohl bereits beantwortet.

        MfG, Thomas