Frage

Zuerst Caching funktionierte nicht in allen Browsern. Dann habe ich es alle Browser in aber IE (IE8) durch .pdf Erweiterung der URL hinzugefügt wird. Servlets aufhörte danach aufgerufen wird.

Ich zeige pdf-Datei inline auf der Webseite über EMBED-Tag, das die folgende URL lädt:

http://localhost:7001/app/viewFile.pdf

, die von Java-Servlet mit den folgenden Header erzeugt wird:

response.addHeader("Content-Disposition", "inline;");
response.setHeader("Cache-control", "cache,max-age=600");
response.setContentType(mimeType);
response.setContentLength(contentLength);

Für pdf in allen Browsern die Anzeige verwende ich Adobe Reader 9.2.0.

Wie man es auch in IE funktioniert? Ich bemerkte, dass IE fügt hinzu 'Cache-Control: no-cache' Header auf Anfrage , während Safari zum Beispiel nicht

.
War es hilfreich?

Lösung

Wie gesagt, die cache-control header Wert cache ist ungültig. Verwenden Sie public statt.

In Bezug auf IE die serverseitigen Cache-Steuerregeln in den embed und object Elementen nicht haftet, ist dies leider ein „Feature“ von IE. Beste, was Sie tun können, ist es von einem iframe Elemente ersetzt werden.

Andere Header wie expires, last-modified, etag und so weiter nicht helfen würde.

Andere Tipps

Einige Ideen aussehen:

  1. Ich glaube nicht, cache ist eine gültige Cache-Control Richtlinie.

    Versuchen Sie, einen Wert von public anstelle oder private wenn das auf Ihre Inhalte besser geeignet ist. Schauen Sie sich RFC 2616 für weitere Informationen.

  2. Vielleicht sind das Senden Sie mehr als ein Cache-Control Richtlinie?

    ein Werkzeug verwenden wie Firebug oder Livehttpheaders am spähen Ist Header Ihr Browser sind Empfang. Stellen Sie sicher, sie sind nicht immer etwas, das man nicht erwarten. Es klingt wie Sie vielleicht schon sein tut dies aber. Auch stellen Sie sicher, dass Sie nicht auch Pragma: no-cache senden.

  3. Versuchen Sie, die Einstellung Expires Header zusätzlich zur Verwendung Cache-Control.

    Es ist auch möglich, Sie senden den Browser kollidiere Cache-Control / Pragma Kopf- und IE wählt die zu übernehmen Pragma Header als erste Priorität aus irgendeinem Grunde nach hinten.

  4. Stellen Sie sicher, IE ist so konfiguriert, Caching zu ermöglichen! :)

    Control Panel> Internet Options> Temporary Internet Files> Settings> Check for newer versions of stored pages

  5. Versuchen Sie, die PDF als Antwort auf eine Anfrage POST Senden (via Formular).

    IE ermöglicht ein Cache zu unabhängig von den Header in der Antwort aufgrund dieser Anforderung von RFC 2616 : „Standardmäßig wird eine Antwort zwischenspeicherbar ist, wenn die Anforderungen des Anforderungsmethode, Anfrage-Header-Felder, und der Antwortstatus anzeigen, dass es zwischenspeicherbar ist“ Die Reaktionen auf POST Anfragen nicht im Cache gespeichert werden, so IE nicht, dass die Header in seiner Anfrage enthalten soll.

  6. Versuchen Sie, den Content-MD5 und Last-Modified Header mit konsistenten Werten zu senden (wenn sie nicht bereits gesendet werden).

    Dies könnte helfen IE davon überzeugen, dass der Inhalt der PDF nicht geändert hat. Ich glaube nicht, diese Lösung funktioniert, weil IE offensichtlich stur ist, aber es ist erwähnenswert.

Nun, eine offensichtliche Art und Weise, um das Problem ist URL-Rewriting zu verwenden. Wenn IE mit .pdf in der Erweiterung funktioniert, verwenden mod_rewrite (Apache) oder ein ähnliches Werkzeug, um serverseitige Umleitung auf der rechten Seite, während der Client machen denken, dass es in der Tat ist eine PDF-Datei anfordert.

Außerdem: die HTTP-Header überprüfen, die der Client empfangen wird, ein Tool wie Fiddler verwenden.

Auch: Bewertung über diese ältere Frage ( PHP: Force-Datei herunterladen und IE, noch einmal ), habe ich ähnliche Probleme mit IE nicht zwingen, Downloads, auch hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top