Tommy: (HTTP) Datei nicht cachen sondern immer neu laden - Sonderfall!

Hallo Forumianer,

Bitte erst lesen, bevor ihr sagt, das problem wäre schon 100x besprochen worden ;)

ich habe habe ein Problem mit dem Cachen einer Seite. Es geht darum, dass sie sich ein externes JavaScript holt:

<script src="hierMeinExternesScript.js"></script>

Und nicht die Seite verändert sich dynamisch - sondern genau die Datei mit dem Script! (hierMeinExternesScript.js)

Alle META-Tags und Headers (no-cache, usw) zwingen zwar die Seite zum reload, nicht aber das externe script, das mittlerweile anders aussieht, als zuvor.

wie kann ich auch dieses Problem umgehen?

Danke im Voraus für Eure Hilfe,
Tommy

  1. Hallo Forum,

    mich hat das ganze nicht in Ruhe gelassen, und ich habe verschiedenes ausprobiert... und dies hier hat funktioniert:

    Statt:

    <script src="hierMeinExternesScript.js"></script>

    schreibe ich:

    <script>
    document.write('<script src="hierMeinExternesScript.js?x='+ Math.random() +'"></scr'+'ipt>');
    </script>

    so raffiniert muß man wohl sein, aber so funktionierts :)

    kurze erklärung: ich übergebe zusätzlich eine variable mit einem zufälligen wert ans script, was dazu führt, dass die datei nicht mehr als die selbe erscheint!

    Das caching wird verhindert!

    Gruß,
    Tommy

    1. Hi Forum

      Scheisse. Jetzt hat schon wieder einer kapiert das ausprobieren und forschen, als zu posten zum Ergebnis führt..

      Einen guten Wochenstart wünscht
      Solei

      Hallo Forum,

      mich hat das ganze nicht in Ruhe gelassen, und ich habe verschiedenes ausprobiert... und dies hier hat funktioniert:

      Statt:

      <script src="hierMeinExternesScript.js"></script>

      schreibe ich:

      <script>

      »»  document.write('<script src="hierMeinExternesScript.js?x='+ Math.random() +'"></scr'+'ipt>');

      </script>

      so raffiniert muß man wohl sein, aber so funktionierts :)

      kurze erklärung: ich übergebe zusätzlich eine variable mit einem zufälligen wert ans script, was dazu führt, dass die datei nicht mehr als die selbe erscheint!

      Das caching wird verhindert!

      Gruß,
      Tommy

      1. Hi Forum

        Scheisse. Jetzt hat schon wieder einer kapiert das ausprobieren und forschen, als zu posten zum Ergebnis führt..

        Einen guten Wochenstart wünscht
        Solei

        hi,

        wieso scheisse?

        natürlich kann man forschen und forschen, aber du kennst doch bestimmt die situation:

        du forschst und experimentierst an einem problem, und nach einer woche hast du's endlich geschafft, und sagst zu einem kollegen: "ich habe das endlich geschafft! das ging so und so." und er sagt darauf? "was hast du gedacht? hätt ich dir gleich sagen können."

        ich will mich daher vorerst umhören. falls ich hiermit jetzt falsch liege und das forum-prinzip falsch verstanden habe dann kläre mich mal auf...

        gruß,
        Tommy

  2. ich habe habe ein Problem mit dem Cachen einer Seite. Es geht darum, dass sie sich ein externes JavaScript holt:

    <script src="hierMeinExternesScript.js"></script>

    Und nicht die Seite verändert sich dynamisch - sondern genau die Datei mit dem Script! (hierMeinExternesScript.js)

    * Wie kann ich den Browser/Proxy anweisen, eine Seite nicht im Cache zu
      speichern?

    Generell sollte man das nicht via HTML machen, da der Quellcode vor
        allem von Proxies meist gar nicht geparsed wird. Ein Script oder der
        Server sollte angewiesen werden folgende Header zu senden:

    Cache-Control: max-age=0, no-cache, must-revalidate
            Expires: Thu, 30 Mar 2000 20:12:39 GMT
            Pragma: no-cache

    Das bei Expires: angegebe Datum sollte das aktuelle Datum im
        HTTP-Date Format sein. '0' ist ein ungültiger Wert!

    Falls der Apache Webserver verwendet wird und die Module mod_headers
        und mod_expires geladen wurden (bei < 2.0 in genau der Reihenfolge)
        kann man z.B. in einer .htaccess folgendes definieren:

    AddType "text/html; charset=iso-8859-1" .html
    ExpiresActive On
    ExpiresByType "text/html; charset=iso-8859-1" "now"
    <Files ~ ".html$">
                Header append Cache-Control "no-cache, must-revalidate"
                Header set Pragma "no-cache"
    </Files>

    um alle .html Dateien nicht zu cachen. Ob man das wirklich will,
        muss man sich gut überlegen; die Webseite wird dadurch erheblich
        langsamer, da der Browser bei jedem Zugriff die Resource erneut vom
        Server holen muss.

    Wenn man die Möglichkeit nicht hat, kann man ein ähnliches Verhalten
        auch mit META-Tags erreichen:

    <meta http-equiv="Cache-Control"
                  content="max-age=0, no-cache, must-revalidate">
            <meta http-equiv="Expires"
                  content="Thu, 30 Mar 2000 20:12:39 GMT">
            <meta http-equiv="Pragma"
                  content="no-cache">