Aktivieren pdf-Caching in IE
-
05-07-2019 - |
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
.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:
-
Ich glaube nicht,
cache
ist eine gültigeCache-Control
Richtlinie.Versuchen Sie, einen Wert von
public
anstelle oderprivate
wenn das auf Ihre Inhalte besser geeignet ist. Schauen Sie sich RFC 2616 für weitere Informationen. -
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. -
Versuchen Sie, die Einstellung
Expires
Header zusätzlich zur VerwendungCache-Control
.Es ist auch möglich, Sie senden den Browser kollidiere
Cache-Control
/Pragma
Kopf- und IE wählt die zu übernehmenPragma
Header als erste Priorität aus irgendeinem Grunde nach hinten. -
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
-
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. -
Versuchen Sie, den
Content-MD5
undLast-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.