Activer la mise en cache de pdf dans IE
-
05-07-2019 - |
Question
Au début, la mise en cache ne fonctionnait pas dans tous les navigateurs. Ensuite, je l'ai fait fonctionner dans tous les navigateurs sauf IE (IE8) en ajoutant l'extension .pdf à l'URL. Servlet a cessé d'être appelé après cela.
J'affiche le fichier pdf en ligne sur la page Web via la balise EMBED qui charge l'URL suivante:
http://localhost:7001/app/viewFile.pdf
Qui est généré par le servlet Java avec les en-têtes suivants:
response.addHeader("Content-Disposition", "inline;");
response.setHeader("Cache-control", "cache,max-age=600");
response.setContentType(mimeType);
response.setContentLength(contentLength);
Pour l’affichage des pdf dans tous les navigateurs, j’utilise Adobe Reader 9.2.0.
Comment le faire fonctionner dans IE aussi? J'ai remarqué que IE ajoutait l'en-tête "Cache-Control: no-cache" à la requête , contrairement à Safari, par exemple.
La solution
Comme indiqué précédemment, le cache-control
La valeur d'en-tête cache
n'est pas valide. Utilisez public
à la place.
Pour IE ne respectant pas les règles de contrôle du cache côté serveur dans les éléments embed
et objet
, il s'agit malheureusement d'une "fonctionnalité". de IE. Le mieux que vous puissiez faire est de le remplacer par un élément iframe
.
D'autres en-têtes tels que expire
, modifié en dernier
, etag
et ainsi de suite ne vont pas vous aider.
Autres conseils
Quelques idées à examiner:
-
Je ne pense pas que
cache
soit une directiveCache-Control
valide.Essayez plutôt d'utiliser la valeur
public
ouprivé
si cela convient mieux à votre contenu. Pour plus d'informations, consultez la RFC 2616 . -
Peut-être que vous envoyez plus d'un Directive
Cache-Control
?Utiliser un outil comme Firebug ou LiveHTTPHeaders pour jeter un coup d'œil à la en-têtes réels de vos navigateurs recevoir. Assurez-vous qu'ils ne sont pas obtenir quelque chose que vous n'attendez pas. Il semble que vous soyez déjà faire cela cependant. Veillez également à ne pas envoyer
Pragma: no-cache
. -
Essayez de régler le En-tête
Expires
en plus de l'utilisation deContrôle de cache
.C'est aussi possible vous envoyez le navigateur
Contrôle de cache
/Pragma
en conflit en-têtes et IE choisit de prendre la Les en-têtesPragma
ont la priorité absolue, quelle que soit la raison. -
Assurez-vous qu'IE est configuré pour autoriser la mise en cache! :)
Panneau de configuration
>Options Internet
>Fichiers Internet temporaires
>Paramètres
>Rechercher les versions les plus récentes des pages stockées
-
Essayez d'envoyer le fichier PDF en réponse à une demande
POST
(via l'envoi du formulaire).IE autorise la mise en cache, quels que soient les en-têtes de la réponse, en raison de cette exigence de RFC 2616 : "Par défaut, une réponse peut être mise en cache si les exigences de la méthode de demande, des champs d'en-tête de demande, et du statut de la réponse indiquent qu'elle peut être mise en cache. " Les réponses aux requêtes
POST
ne peuvent PAS être mises en mémoire cache. IE ne doit donc pas inclure cet en-tête dans sa requête. -
Essayez d'envoyer les en-têtes
Content-MD5
etLast-Modified
avec des valeurs cohérentes (si elles ne sont pas déjà envoyées).Cela pourrait aider à convaincre IE que le contenu du PDF n'a pas changé. Je ne pense pas que cette solution fonctionnera, car IE est manifestement têtu, mais il convient de le mentionner.
Eh bien, une solution évidente au problème consiste à utiliser la réécriture d’URL. Si IE fonctionne avec l'extension .pdf, utilisez mod_rewrite (Apache) ou un outil similaire pour la redirection côté serveur vers la bonne page, tout en laissant croire au client qu'il s'agit bien d'un fichier PDF.
Aussi: vérifiez les en-têtes HTTP que le client reçoit à l'aide d'un outil tel que Fiddler.
Également: consultez cette ancienne question ( PHP: Forcer le téléchargement de fichier et IE, encore une fois ), j’ai eu des problèmes similaires avec IE, qui n’imposait pas trop le téléchargement.