Ne peut pas afficher PDF à partir de HTTPS dans IE 8 (sur Vista 64-bit))

j'ai un serveur HTTPS maison qui sert des fichiers simples (il est intégré dans mon application). Il fonctionne très bien -- l'utilise jamais.

a récemment ajouté le soutien SSL -- Chrome, FireFox et IE tous l'aiment et charger des pages très bien.

le problème que je trouve est quand j'essaie de charger un fichier PDF sur la connexion HTTPS. Pour une raison quelconque, le PDF ne s'affiche jamais dans IE 8 (64-bit sur 64-bit Vista). Il fonctionne très bien en Chrome. Et ça marche très bien en IE 8 lors de L'utilisation de HTTP -- ne échoue que lors de L'utilisation de HTTPS.

NOTE: quand IE 8 est mentionné, C'est IE 8 32-bit sur 64-bit Vista, bien que IE 8 64-bit ait le même comportement.

cela me fait penser que c'est une sorte de problème D'OS 8/HTTPS/PDF/64-bit, mais je ne suis pas sûr.

DebugBar pour IE 8 montre que la requête et la réponse se sont passées exactement comme prévu -- aucune erreur. IE 8 ne montre aucune erreur ou quoi que ce soit -- écran blanc pur (ou la page qui était affiché avant que j'ai essayé de charger le fichier PDF). Effacé cache / cookies / etc.

y a-t-il des problèmes connus avec IE/PDF/HTTPS?

43
demandé sur DougN 2009-06-24 18:26:00

8 réponses

pensait que j'allais revenir et donner la réponse finale.

merci à tous ceux qui ont suggéré "ne sauvegardez pas les pages cryptées sur disque".

j'ai suivi le Conseil D'EricLaw et mis:

Cache-Control: private 

j'ai aussi trouvé que j'avais Pragma: no-cache , que j'ai enlevé.

Fonctionne comme un charme maintenant :)

39
répondu DougN 2013-09-30 13:43:57

j'ai rencontré ce même problème, et n'ai pu le faire fonctionner qu'en demandant à l'utilisateur de modifier ses 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 terminée, j'ai commencé à regarder le code (ASP.NET utilisation de VB). J'ai utilisé fiddler et j'ai trouvé que même quand je ne spécifiais pas l'en-tête cache-control, il semblait que le Framework spécifiait automatiquement no-store pour moi. La clé pour résoudre le problème était en fait dans cette question PHP . En réglant l'en-tête cache-control à max-age=1 , le fichier serait mis en cache pendant 1 seconde, juste assez longtemps pour Qu'Adobe Reader puisse le récupérer sur le disque et le charger en mémoire. J'ai mis à jour notre code pour générer le 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éé un nouvelle question pour donner suite à ce numéro.

10
répondu wweicker 2017-05-23 12:32:08
response.setHeader("Cache-Control","private");

a fait l'affaire pour nous dans IE8 et IE9.

qui ne nécessitaient pas de modifier les paramètres du navigateur.

10
répondu so_mv 2012-06-05 19:38:59

j'ai eu un problème similaire avec IE8 et https. Quand j'ai essayé de streamer un pdf vers une nouvelle fenêtre, j'ai eu une page html Vierge à la place (Cela a fonctionné dans FireFox et si ce n'était pas via https). Après beaucoup de recherches et d'essais de différentes variantes des en-têtes de réponse, la solution pour moi était de mettre:

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

ceci télécharge le pdf entier avant qu'il ouvre ce qui est moins convivial si c'est un pdf très grand. Mais dans mon cas, la plupart des fichiers pdf ont été ne fait que quelques pages. Espérons que cela aide quelqu'un.

4
répondu Daniel Lee 2009-11-02 12:35:59

Je ne vois aucune référence à .NET dans votre question, mais je vais fournir une solution connexe. Espérons que vous pouvez en tirer ce dont vous avez besoin, et les développeurs supposant que votre question se rapporte à .NET pourrait y trouver de la valeur, aussi.

Voici une méthode que j'ai utilisée auparavant pour rendre les PDF dans le navigateur, via HTTPS, sans** caching.

    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 un pseudo-cache qui se produit, juste assez longtemps pour Adobe Lecteur pour charger le fichier PDF. J'ai cherché une référence décrivant ce que je parle, et un fil de forum aléatoire est le mieux que je pouvais faire:

IE stocke le PDF en mémoire et lieux "volatiles" alloués un pointeur en% de la température du système. C'est le seul endroit où le fichier est stocké. Le lien est supprimé et alloué la mémoire est libérée dès Qu'Adobe Le lecteur est fermé.

Je ne peux pas répondre pour la précision technique de cela, mais il reflète ce que j'ai observé en utilisant la méthode ci-dessus. En fait, je pense que ce fichier disparaît au moment où il est terminé le chargement dans Adobe Reader (dans le navigateur).

3
répondu lance 2009-07-10 22:00:05

utilisez-vous la version 32 bits ou 64 bits D'IE sur Vista 64? Il est livré avec deux. La plupart du temps, la version 32 bits est utilisée car peu de plugins prennent encore en charge 64 bits.

je vérifierais s'il y a une différence entre les deux. Si cela fonctionne dans IE 8 32 bit sur Vista 64 alors il pourrait être un problème avec la version 64 bits de L'objet navigateur Helper (BHO).

aussi, vérifier pour voir (via la présence D'un gestionnaire de tâches d'un '*32' après un nom de processus) si les autres navigateurs fonctionnent en 32 bits mode.

une autre chose que je vérifierais pour voir si est HTTPS fait que IE8 ne cache pas le fichier PDF pour une raison quelconque (le trafic HTTPS n'est généralement pas caché). J'ai lancé procmon pour voir si vous remarquez qu'un fichier PDF est écrit dans le système de fichiers. Il pourrait y avoir des politiques que vous pourriez avoir besoin de changer. Je ne suis pas sûr s'Il ya une autre façon de dire que vous avez un PDF qui ne devrait pas être écrit sur le disque, mais encore pourrait être affichée.

0
répondu Jeff Moser 2009-06-24 15:04:35

en tant qu'utilisateur, j'ai eu le même problème en chargeant des fichiers pdf à partir de Schwab.com. Le Conseil de "désactiver Ne pas sauvegarder 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 " travaillait pour moi.

0
répondu 2009-09-01 05:00:25

ma solution (il nous a fallu des jours à jouer avec les en-têtes pour que cela fonctionne):

            if (System.Web.HttpContext.Current.Request.Browser.Browser == "InternetExplorer"
                && System.Web.HttpContext.Current.Request.Browser.Version == "8.0")
            {
                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.ClearContent();
                System.Web.HttpContext.Current.Response.ClearHeaders();
                System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";

                System.Web.HttpContext.Current.Response.AppendHeader("Pragma", "public");
                System.Web.HttpContext.Current.Response.AppendHeader("Cache-Control", "private, max-age=60");
                System.Web.HttpContext.Current.Response.AppendHeader("Content-Transfer-Encoding", "binary");

                System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + document.Filename);
                System.Web.HttpContext.Current.Response.AddHeader("content-length", document.Data.LongLength.ToString());

                System.Web.HttpContext.Current.Response.BinaryWrite(document.Data);
            }

L'espoir qui aide quelqu'un

0
répondu metroas 2015-03-06 09:40:22