Génération de PDF, erreur avec IE et HTTPS
Je suis de la diffusion d'un fichier PDF dans le navigateur ASP.NET 2.0. Cela fonctionne dans tous les navigateurs via HTTP, et tous les navigateurs sauf IE sur HTTPS. Autant que je sache, cette habitude de travailler (au cours des 5 dernières années) dans toutes les versions d'IE, mais nos clients ont que récemment commencé à signaler des problèmes. Je soupçonne que le Ne pas enregistrer les pages cryptées sur le disque option de sécurité utilisé pour être désactivés par défaut et à un certain point est activé par défaut (Options Internet -> Avancé> Sécurité). La désactivation de cette option permet, comme un travail, mais n'est pas viable comme solution à long terme.
Le message d'erreur que je reçois est:
Internet Explorer ne peut pas télécharger OutputReport.aspx partir de www.sitename.com.
Internet Explorer n'a pas pu ouvrir ce site Internet. Le site requis n'est pas disponible ou ne peut être trouvé. S'il vous plaît essayer à nouveau plus tard.
L'outil utilisé pour créer le fichier PDF est ActiveReports de DataDynamics. Une fois le fichier PDF est créé, voici le code à envoyer vers le bas:
Response.ClearContent()
Response.ClearHeaders()
Response.AddHeader("cache-control", "max-age=1")
Response.ContentType = "application/pdf"
Response.AddHeader("content-disposition", "attachment; filename=statement.pdf")
Response.AddHeader("content-length", mem_stream.Length.ToString)
Response.BinaryWrite(mem_stream.ToArray())
Response.Flush()
Response.End()
Remarque: Si je n'ai pas spécifier explicitement le contrôle du cache, ensuite .NET n'envoie pas de cache sur mon compte, j'ai donc tenté la mise en cache-control: public ou privé ou maxage=#, mais aucune de ces semblent fonctionner.
Voici le twist: quand je lance un violon pour inspecter les en-têtes de réponse, tout fonctionne bien. Les en-têtes que je reçois sont:
HTTP/1.1 200 OK
Cache-Control: max-age=1
Date: Wed, 29 Jul 2009 17:57:58 GMT
Content-Type: application/pdf
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
content-disposition: attachment; filename=instruction.pdf
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
Dès que je tourne Violoniste hors tension et essayez de nouveau, il échoue à nouveau. Une autre chose que j'ai remarqué c'est que quand Fiddler est en cours d'exécution, je reçois un Il y a un problème avec ce site web de certificat de sécurité message d'avertissement, et je dois cliquer sur Poursuivre sur ce site web (non recommandé) pour passer à travers. Quand Fiddler est éteint, je ne rencontre pas cet avertissement de sécurité et il ne parvient pas tout de suite.
Je suis curieux de savoir ce qui se passe entre le Violoniste et le navigateur de sorte qu'il fonctionne quand Fiddler est en cours d'exécution, mais se casse quand il ne l'est pas, mais plus important encore, quelqu'un a une idée comment je pourrais modifier mon code pour le streaming de fichiers Pdf pour IE travail sans apporter de modifications à la machine client?
mise à Jour: Le Violoneux les problèmes sont résolus, je vous remercie beaucoup EricLaw, alors maintenant il se comporte de manière uniforme (cassé, avec ou sans Fiddler en cours d'exécution).
Basée sur la recherche sur Google, il semble y avoir beaucoup de rapports de cette même question sur le web, chacun avec son propre combinaison des en-têtes de réponse qui semble corriger le problème, pour les cas individuels. J'ai essayé plusieurs de ces suggestions, y compris l'ajout d'un ETag, date de dernière modification, suppression de l'en-tête Vary (à l'aide de Fiddler) et des dizaines de combinaisons de Cache-Control et/ou Pragma-têtes. J'ai essayé le "Content-Transfer-Encoding: binary" ainsi que "application/force-download" pour le ContentType. Rien n'a aidé jusqu'à présent. Il y a un quelques Microsoft KO articlesqui indiquent tous que Cache-Control: no-cache est le coupable. D'autres idées?
mise à Jour: Par la façon dont, par souci d'exhaustivité, ce même problème se produit avec Excel et Word sorties.
mise à Jour: Aucun progrès n'a été fait. J'ai contacté l' .SAZ fichier à partir d'un violon pour EricLaw et il a été en mesure de reproduire le problème lors du débogage d'IE, mais il n'y a pas de solutions encore. Bounty va expirer...
source d'informationauteur wweicker
Vous devez vous connecter pour publier un commentaire.
Votre Cache-Control en-tête est incorrect. Il devrait être Cache-Control: max-age=1 avec le tableau de bord dans le milieu. Essayez la fixation de la première pour voir si cela fait une différence.
Généralement, je dirais que le plus probable est votre en-tête Vary, tels que les en-têtes causent souvent des problèmes avec la mise en cache dans IE: http://blogs.msdn.com/ieinternals/archive/2009/06/17/9769915.aspx. Vous voudrez peut-être essayer d'ajouter un ETAG pour les en-têtes de réponse.
Fiddler ne devrait avoir aucune incidence sur cacheability (sauf si vous avez des règles écrites), et il semble que vous êtes en train de dire qu'il n', ce qui suggère que peut-être il y a un problème de synchronisation de quelque sorte.
>Ne pas enregistrer les pages cryptées sur le disque option de sécurité utilisé pour être désactivés par défaut
Cette option est toujours désactivé par défaut (dans IE6, 7 et 8), bien que les Administrateurs peuvent activer via la Stratégie de Groupe, et certaines des grandes entreprises le faire.
D'ailleurs, la raison pour laquelle vous voyez le certificat d'erreur lors de l'exécution de Fiddler est que vous n'avez pas été élu pour faire confiance à la Fiddler certificat racine; voir http://www.fiddler2.com/fiddler/help/httpsdecryption.asp pour en savoir plus sur ce sujet.
Après deux semaines sur une oie sauvage chasse, je n'ai pas été en mesure de trouver n'importe quelle combinaison de changements de code qui permettra à cette méthode de streaming PDF, Excel et des documents Word, lorsque le " Ne pas enregistrer les pages cryptées sur le disque' option est activée.
Microsoft a déclaré ce comportement est par la conception d'un certain nombre d'articles de base de connaissances et des e-mails privés. Il semble que lorsque le " Ne pas enregistrer les pages cryptées sur le disque' option est activée que IE est de se comporter correctement et de ce qui lui est dit de faire. Ce post est la meilleure ressource que j'ai trouvé jusqu'ici et qui explique pourquoi ce paramètre est activé et les avantages et les Inconvénients de l'activer:
La meilleure solution que l'on peut trouver à ce stade est de communiquer à nos clients et utilisateurs qu'il existe des alternatives à l'utilisation de ce paramètre:
J'ai eu un problème similaire avec les fichiers PDF que je voulais diffuser. Même avec
Response.ClearHeaders()
j'ai vu Pragma et-tête Cache-Control ajoutées lors de l'exécution. La solution était d'effacer les en-têtes dans IIS (clic Droit -> Propriétés sur chargement de la page, le fichier PDF, puis "en-têtes Http" de l'onglet).J'ai trouvé que cela semblait fonctionner pour moi:
RÉSOLU: C'est un problème IE, pas de aplication...
fixer avec ceci: http://support.microsoft.com/kb/323308
Il travail parfait pour moi, pour l'avoir essayer pendant une longue période.
ATT: M. Sombre
Nous avons été confrontés à un problème similaire long temps de retour - ce que nous avons fait a été de nous (c'est Java EE). Dans la config de l'application web, nous ajoutons
Cela fera toute pdf à venir à partir de votre application web pour être téléchargé au lieu du navigateur essayez de rendre.
MODIFIER: on dirait que vous êtes en streaming. Dans ce cas, vous devrez utiliser un type mime application/octet-stream dans votre code et pas dans la config. Donc ici, au lieu de
vous allez utiliser
Quelle version de IE? Je rappelle que Microsoft a publié un Correctif pour IE6 pour cette question. L'espoir qui est de quelque utilité?
Que j'ai lu de votre Cache-control poursuite de l'oie, mais je vais partager mine de, qui répondait à mes besoinsau cas où il permet.
essayer de désactiver la compression gzip.
De l'ajouter ici en espérant que quelqu'un pourrait trouver utile, au lieu d'aller à travers les liens.
Voici mon code
Comme l'OP, j'ai été de me gratter la tête pendant des jours à essayer d'obtenir ce travail, mais je l'ai fait à la fin, alors j'ai pensé que je devais partager mon "combinaison" des en-têtes:
Espoir qui sauve quelqu'un, quelque part un peu de douleur!
J'ai été confronté à un problème similaire avec de tenter de diffuser un PDF via le protocole SSL et mettre cela dans un iframe ou un objet. J'ai découvert que ma page aspx permettrait de garder rediriger vers le non-version sécurisée de l'URL, le navigateur ne bloque.
J'ai trouvé de commutation à partir d'une page ASPX pour un ASHX gestionnaire fixe mon problème de redirection.