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.

Était-ce utile?

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:

  1. Je ne pense pas que cache soit une directive Cache-Control valide.

    Essayez plutôt d'utiliser la valeur public ou privé si cela convient mieux à votre contenu. Pour plus d'informations, consultez la RFC 2616 .

  2. 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 .

  3. Essayez de régler le En-tête Expires en plus de l'utilisation de Contrô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êtes Pragma ont la priorité absolue, quelle que soit la raison.

  4. 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

  5. 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.

  6. Essayez d'envoyer les en-têtes Content-MD5 et Last-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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top