pixxma: IE 11 zeigt falsche Dateien an (Intranet)

Hallo,

wir haben ein Problem in unserem Firmen-Intranet. – Es sind dort mehrere hundert Dateien verlinkt, evtl. ist es auch schon eine vierstellige Anzahl. Zu 95 % sind es PDF-Dateien. Sie werden laufend aktualisiert. Die meisten Mitarbeiter müssen (leider immer noch) den IE 11 benutzen (Vorgabe Netzwerkverwaltung). Die Konfiguration bzgl. PDF-Dateien ist dergestalt, dass sich die PDF-Dateien browserextern im Acrobat Reader DC und nicht browserintern in einem PDF-Plug-in öffnen. – Das ist die gegebene Sachlage, mit der man leben könnte, wenn sie einwandfrei funktionieren würde.

Nun das Problem: es kommt leider immer wieder in Einzelfällen vor, dass sich statt der angeklickten aktuellen PDF-Datei (die also bereits auf den Firmenserver hochgeladen wurde) die alte PDF-Version (also die Vorgängerdatei) öffnet. D.h. der IE 11 zieht nicht die Datei vom Server, sondern die aus seinem Cache.

Ich habe die Netzwerkverwaltung auf dieses Problem angesprochen: wegen anderer Fachanwendungen, die ebenfalls über den IE 11 laufen, können/wollen sie ihn nicht so konfigurieren, dass der Cache eines jeden Nutzers nach der Browser-Benutzung automatisch geleert wird. Sie haben stattdessen die Gültigkeitsdauer der Cache-Elemente auf einen Tag begrenzt. Aber diese Regel greift nicht bei jedem User: es gab nach Aktivierung dieser Regel trotzdem immer wieder einzelne Fälle, bei denen die alte Datei statt der neuen gezogen wurde.

Was kann man außer einem Browserwechsel noch machen, so dass wirklich nur aktuelle Dateien angezeigt werden? Kann man den Dateien irgendetwas „mitgeben“, das den IE 11 dazu bringt, immer nur die aktuelle Dateiversion vom Server anzuzeigen?

MfG

pixxma

akzeptierte Antworten

  1. Hallo pixxma,

    wie sind die PDFs denn verlinkt? Mit file:/// wohl nicht, sonst würde der Browser-Cache nicht greifen. Wenn mit http://, dann läuft der Zugriff über einen Webserver. Und dann könnte man für dieses Web ggf. an den Headern herumspielen.

    Rolf

    --
    sumpsi - posui - clusi
    1. Nabend,

      es ist eine klassische Client-Server-Konstellation über http://.

      [...] Und dann könnte man für dieses Web ggf. an den Headern herumspielen.

      Naja, das ist ja meine Hoffnung, dass ICH als Seitenersteller quasi das Ganze beeinflussen kann - nur fällt mir leider nichts ein ... An was denkst Du bei „an den Headern herumspielen“?

      MfG

      pixxma

      1. Hallo pixxma,

        mit dem IIS kannst du auf Ordner-Ebene Header vordefinieren (im IIS Manager den Ordner mit den PDFs auswählen, dann rechts in der IIS Rubrik "HTTP Antwortheader" doppelklicken. Du hast nun die Möglichkeit, einen Expires-Header manuell einzutragen, oder mit "Gemeinsam genutzte HTTP Antwortheader" die Expiration Time per GUI anzugeben. Dieser Dialogtitel ist im deutschen IIS eine schreckliche Falschübersetzung, original heißt es "Set Common Headers", also sowas wie "Setze häufig verwendete Header".

        Letztlich macht der IIS daraus einen Eintrag in der web.config. Es kann mehrere web.configs geben, eine pro Ordner. Die im Stammordner des Webs vererbt sich in die Unterverzeichnisse, sofern die keine eigenen web.config haben. So sieht's aus, wenn Du Caching ganz abschaltest:

            <system.webServer>
                <staticContent>
                    <clientCache cacheControlMode="DisableCache" />
                </staticContent>
            </system.webServer>
        

        Es gibt auch andere Optionen, Doku steht hier

        Header pro Dateityp habe ich in den IIS Einstellungen nicht gefunden. Aber wenn deine Link-Targets alle in einem gemeinsamen Ordner liegen, sollte das nichts ausmachen.

        Rolf

        --
        sumpsi - posui - clusi
        1. Es gibt auch andere Optionen, Doku steht hier

          Alles richtig. Aber da fehlt was. Denn das erklärt nur wie man die Gültigkeit des Caches ganz verneint oder zeitlich begrenzt.

          Es gibt aber noch die im konkreten Fall wohl effizientere Möglichkeit den Client und alle Proxys anzuweisen, anhand des ETAGS vom Server überprüfen zu lassen ob die gecachte Datei noch gültig ist. Damit lässt sich das Datentransfervolumen effektiver und sachlich sinnvoller beschränken als mit einem reinem Zeitrahmen oder gar dem Abschalten des Caches.

          Vorliegend würde ich wegen der doch recht statischen Inhalte eher auf einen ETAG (den der IIS berechnen und als Header senden kann) und den HTTP-header Cache-Control: must-revalidate; max-age=604800 setzen. Der ist hier erklärt. Dabei kann man mit der Gültigkeit (60480 Sekunden = 1 Woche) sogar höher gehen.

          Das Abschalten des Caches lohnt sich eigentlich nur wenn man sehr variable Daten abholt (dann lohnt sich das nicht) und/oder der Ersteller der Software nicht bereit ist, den ETAG aus der Datenbasis zu berechnen und die Header durch seine Software zu setzen. Bei den statischen PDFs aus dem Dateisystem kann das auch der IIS quasi ganz alleine.

          1. Danke für die Lösungsvorschläge! Ich werde das mit den Netzwerkadmins mal durchsprechen!

            MfG

            pixxma

  2. In Apache sehe ich zwei Module, mod_expires und mod_cache. Sie sind standardmäßig m.W. nicht geladen. Man kann aber die entsprechenden .load-Dateien von mods_available einfach in mods_enabled verlinken.

    Mit expires könnte man in dem (Wurzel-)Verzeichnis der pdf-Dateien eine .htaccess mit folgendem Inhalt anlegen oder ergänzen:

    ExpiresActive On
    ExpiresDefault "access plus 1 day"
    ExpiresByType text/pdf "access plus 1 day"
    

    (Natürlich nur eine der beiden unteren Zeilen.) Eine Anleitung gibt es hier.

    Eine Anleitung zu mod_cache gibt es hier.

    Geholfen?

    Viele Grüße

    Wilfried

    1. Vielen Dank Wilfried, aber die Netzwerkadministration hat dem MS IIS den Vorzug gegeben ...

      MfG

      pixxma