Wie verhindere ich, Tomcat-Dateien in einem Kontext von Caching in einem Browser zum Einsatz?

StackOverflow https://stackoverflow.com/questions/1138399

Frage

Ich arbeite an einer Java / Struts-Anwendung, die 6.0.10 Tomcat verwendet. Es ist eine typische Web-Anwendung, die Benutzer einige Formulare bearbeiten können, und Ströme von PDFs. Weg zurück, wir hinzugefügt:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>GeneralRequests</web-resource-name>
        <url-pattern>/WR1/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

So, dass jede der Nicht-Streaming-Seiten gezwungen wird, in HTTPS und nicht zwischengespeichert (dachten wir). Es gibt einen separaten Eintrag Einschränkung für die Streaming-Seiten im System.

In den letzten Tests auf IE6, wir finden, dass „manchmal“ die Seiten-Caching, obwohl wir haben nicht vollständig bestimmt, wann. Neben der VERTRAULICH Flagge, wir auch genutzt haben:

        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache,no-store,max-age=0");
        response.setDateHeader("Expires", 1);

Aber wir entfernt diese, weil es schien, hässlich Wieder Entsendung Warnungen in IE6 zu verursachen, und wir dachten, dass die VERTRAULICH Transport-Garantie auch alles richtigen Mechanik enthielt Browser-Caching der Seite zu verhindern. Wir würden lieber das Thema verlassen, um Tomcat richtig zu machen.

Was ist der „richtige“ Weg, um diese Dinge zu tun, damit wir nicht (wie viele) Probleme in der Zukunft haben?

Sind unsere Caching Probleme durch einen bestimmten Fehler in IE6 verursacht wird? Oder nur eine bestimmte Reihe von Veröffentlichungen? Ist dies in 7 und / oder 8 passieren zulassen?

UPDATE: Wir überprüften, und Tomcat korrekt die Pragma, Cache-Control Senden und Verfällt params, so dass nicht das Problem (na ja, die No-String und max-age-Werte sind nicht gesendet wird, ist aber noch nicht das Problem).

Das Problem stellte sich heraus, die Apache Portable Runtime (APR) 1.1.8 zu sein. Irgendwie obwohl wir sind nicht ganz sicher, warum es doppelten Browser der aus einer einzigen Anfrage erstellt. Für uns, es sah aus, als ob die Seite zwischengespeichert wurde, weil es eine ungültigen Struts Transaktion Token enthalten ist, aber in Wirklichkeit eine zweite Ausführung Version der gleichen Anfrage (mit der falschen Session-ID) wurde das Überschreiben der Token der ursprünglichen Anforderung in der Sitzung. Ein Upgrade auf 1.1.16 das Problem behoben.

Warum wurden einige Anfragen dupliziert zu werden (aber mit unterschiedlichen Sitzungen ids) ist noch ein Geheimnis ...

Paul.

War es hilfreich?

Lösung

sollte kein Browser alle Elemente zwischenzuspeichern es über SSL empfängt, also würde ich einen Bug in IE6 neigen zu. Sie könnten versuchen, 0 oder -1 als der Wert für Verfällt anstelle von 1, aber alles andere sieht man tut mir in Ordnung.

response.setHeader("Expires", 0);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top