43 votes

Impossible d'afficher un fichier PDF à partir de HTTPS dans IE 8 (sous Vista 64 bits)

J'ai un home-grown HTTPS serveur qui sert de simple fichiers (il est intégré au sein de mon application). Il fonctionne très bien -- l'utilise jamais.

Récemment ajouté le support de SSL -- Chrome, FireFox et IE tout ce qu'il souhaite et de charger les pages de l'amende juste.

Le problème je trouve, c'est quand j'essaie de charger un fichier PDF sur la connexion HTTPS. Pour une raison quelconque, le PDF ne s'affiche dans IE 8 (64-bit Vista 64-bit). Il fonctionne très bien sur Chrome. Et il fonctionne très bien sous IE 8 lors de l'utilisation de la plaine HTTP -- échoue uniquement lors de l'utilisation de HTTPS.

REMARQUE: Lorsque IE 8 est mentionné, il est 32 bits IE 8 sur Vista 64 bits, bien que le 64 bits IE 8 a le même comportement.

Ça me fait penser à une sorte de IE 8/HTTPS/PDF/système d'exploitation 64 bits question, mais je ne suis pas sûr.

DebugBar pour IE 8 montre que la demande et la réponse s'est passé exactement comme prévu -- pas d'erreurs à tous. IE 8 ne pas afficher les erreurs ou quoi que ce soit-d'un blanc pur de l'écran (ou de la page qui était affiché avant que j'ai essayé de charger le fichier PDF). Effacé le cache/cookies/etc.

Existe-il des problèmes connus avec IE/PDF/HTTPS?

39voto

DougN Points 1768

Je pensais revenir et donner la réponse finale.

Merci à tous ceux qui ont suggéré "Ne sauvegardez pas les pages cryptées sur le disque".

J'ai suivi le conseil d'Eric Law et mis:

 Cache-Control: private 
 

J'ai également constaté que j'avais Pragma: no-cache , que j'ai enlevé.

Ça fonctionne parfaitement maintenant :)

10voto

wweicker Points 2262

J'ai rencontré ce même problème, et ne pouvait le faire fonctionner en demandant à l'utilisateur de modifier leurs paramètres de sécurité pour désactiver Ne pas enregistrer les pages cryptées sur le disque dans l'onglet Avancé de la boîte de dialogue Options Internet: http://support.microsoft.com/kb/812935

...puis avec la panique immédiate de plus, j'ai commencé à regarder le code (ASP.NET à l'aide de VB). J'ai utilisé le violoneux, et a constaté que même quand je n'étais pas la spécification de l'entête cache-control, il semblait que le Cadre a été automatiquement sans spécifier de magasin pour moi. La clé pour résoudre le problème qui a été fait dans ce PHP question. Par la mise en au-tête cache-control pour max-age=1 le fichier est mis en cache pendant 1 seconde, juste assez longtemps pour Adobe Reader pour le ramasser à partir du disque et de le charger en mémoire. J'ai mis à jour notre code pour générer le fichier PDF, comme suit:

Response.ClearContent()
Response.ClearHeaders()
Response.AddHeader("cache-control", "max-age=1")
Response.ContentType = "application/pdf"
Response.AddHeader("content-disposition", "attachment; filename=whatever.pdf")
Response.AddHeader("content-length", mem_stream.Length.ToString)
Response.BinaryWrite(mem_stream.ToArray())
Response.Flush()
Response.End()

Mise à jour: je pensais que c'était du travail, mais je suppose que j'ai parlé trop vite. J'ai créé une nouvelle question à suivre à travers avec ce problème.

10voto

so_mv Points 1859
 response.setHeader("Cache-Control","private");
 

a fait le tour pour nous dans IE8 et IE9.

Cela n'a pas nécessité de modifier les paramètres dans le navigateur.

4voto

Daniel Lee Points 2273

J'ai eu un problème similaire avec IE8 et https. Quand j'ai essayé de diffuser un fichier pdf sur une nouvelle fenêtre, j'ai une page html vide à la place (il a travaillé dans FireFox, et si ce n'était pas via le protocole https). Après beaucoup de recherche et d'essayer différentes variations des en-têtes de réponse, la solution pour moi a été de définir:

Response.AppendHeader("Accept-Ranges", "none");

Ceci télécharge l'ensemble de la pdf avant d'ouvrir ce qui est moins convivial si c'est une très grande pdf. Mais dans mon cas, la plupart des fichiers pdf ont été seulement quelques pages. Espérons que cela aide quelqu'un.

3voto

lance Points 6325

Je ne vois aucune référence à l' .NET dans votre question, mais je vais vous fournir une solution connexe. J'espère que vous pouvez prendre ce que vous avez besoin, et les développeurs en supposant que votre question concerne .NET peut trouver de la valeur dans aussi.

Voici une méthode que j'ai utilisé avant de s'afficher dans un navigateur de fichiers Pdf, via HTTPS, sans** la mise en cache.

    private void RenderPdfToResponse(byte[] documentBytes) {
        Response.BufferOutput = true;
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("Cache-control", "no-store");
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Length", documentBytes.Length.ToString());
        Response.BinaryWrite(documentBytes);
        Response.Flush();
        HttpContext.Current.ApplicationInstance.CompleteRequest();
    }

** Il y a une pseudo-cache qui se produit, juste assez longtemps pour Adobe Reader pour charger le fichier PDF. J'ai recherché une référence à décrire ce que je suis en train de parler, et un aléatoire fil de discussion du forum est le meilleur que j'ai pu faire:

IE stocke le fichier PDF dans alloués 'volatile' la mémoire et des lieux un pointeur de %system% Temp. C'est le seul endroit où le fichier est stocké. L' lien est supprimé et alloué la mémoire est libérée dès que Adobe Le lecteur est fermé.

Je ne peux pas se porter garant de l'exactitude technique de ce, mais il reflète ce que j'ai observé à l'aide de la méthode ci-dessus. En fait, je pense que ce fichier disparaît dès qu'elle est fini de charger dans Adobe Reader (dans le navigateur).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X