Je suis en train de diffuser un PDF au navigateur dans ASP.NET 2.0. Cela fonctionne dans tous les navigateurs sur http et tous les navigateurs sauf i> sur https. Pour autant que je sache, cela travaillait (au cours des 5 dernières années) dans toutes les versions de IE, mais nos clients n'ont commencé que récemment à signaler des problèmes. Je soupçonne que les ne sauvegardez pas les pages cryptées sur le disque i> Option de sécurité utilisée pour être désactivé par défaut et sont activées par défaut (options Internet -> Avancé -> Sécurité). Tourner cette option d'éteindre aide, comme un travail autour, mais n'est pas viable en tant que solution à long terme.
Le message d'erreur que je reçois est: P>
Internet Explorer ne peut pas télécharger la sortieReporT.aspx à partir de www.sitename.com. P>
Internet Explorer n'a pas pu ouvrir ce site Internet. Le site demandé est indisponible ou introuvable. Veuillez réessayer plus tard. P> BlockQuote>
L'outil utilisé pour créer le fichier PDF est ActiveReports de DataDynnamics . Une fois que le PDF est créé, voici le code pour l'envoyer: p>
xxx pré> Remarque: Si je spécifie explicitement spécifier le cache-contrôle, alors .NET envoie no-cache sur mon compte, j'ai donc essayé de définir le contrôle du cache-contrôle à: privé ou public ou maxage = #, mais aucun de ceux qui ne semblent fonctionner. P>
Voici la torsion: quand je suis exécuté pour inspecter les en-têtes de réponse , tout fonctionne bien. Les en-têtes que je reçoivent sont: P>
http / 1.1 200 OK
Cache-Control: max-Âge = 1
Date: Mer, 29 Jul 2009 17:57:58 GMT
Type de contenu: Application / PDF
Serveur: Microsoft-IIS / 6.0
MicrosoftOfficewebserver: 5.0_pub
X-Powered-by: asp.net
X-aspnet-Version: 2.0.50727
disposition de contenu: pièce jointe; Nom de fichier = déclaration.pdf
Contenu-coding: gzip
Varier: Accepter-coding
Cooding-transfert:
p> BlockQuote>Dès que je deviendrai Fiddler et réessayez, il échoue à nouveau. Une autre chose que j'ai remarquée, c'est que lorsque Fiddler est en cours d'exécution, je reçois un Il y a un problème avec le certificat de sécurité de ce site Web i> message d'avertissement, et je dois cliquer sur continuer sur ce site (non recommandé) I> Pour réussir. Quand Fiddler est désactivé, je ne rencontre pas cet avertissement de sécurité et il échoue immédiatement. P>
Je suis curieux de savoir ce qui se passe entre le violon et le navigateur afin que cela fonctionne lorsque le violon est en cours d'exécution, mais ce n'est pas la casse. Mais plus important encore, quelqu'un a-t-il des idées comment je pourrais changer mon code afin de diffuser des PDF à IE fonctionnera sans apporter des modifications à la machine client? p>
Mise à jour: b> Les problèmes de violoneur sont résolu, merci beaucoup Ericlaw, alors il se comporte toujours systématiquement (cassé, avec ou sans courir de violoneur). P>
basé sur la recherche de Google, il semble y avoir de nombreux rapports de ce même problème sur le Web. , chacun avec sa propre combinaison spécifique d'en-têtes de réponse qui semblent résoudre le problème de leurs cas individuels. J'ai essayé beaucoup de ces suggestions, y compris l'ajout d'une éditeuse, une date de mise en place de la dernière modification, en supprimant l'en-tête Vary (à l'aide de Fiddler) et des dizaines de combinaisons des en-têtes de contrôle du cache et / ou de pragmes. J'ai essayé "Content-Transfer-coding: binaire" ainsi que "application / téléchargement de force" pour le contenu du contenu. Rien n'a aidé jusqu'à présent. Il y a un quelques Microsoft KB Articles , qui indiquent que Cache-contrôle: No-cache i> est le coupable. Toute autre idée? P>
Mise à jour: B> Au fait, pour la complétude, ce même problème se produit également avec des sorties Excel et Word. P>
Mise à jour : B> Aucun progrès n'a été fait. J'ai envoyé un courriel au fichier .Saz de Fiddler à Ericlaw et il a été capable de reproduire le problème lors du débogage, c'est-à-dire, mais il n'y a pas encore de solutions. Bounty va expirer ... p> p>
12 Réponses :
Quelle version de IE? Je me souviens que Microsoft a publié Hotfix pour IE6 pour ce numéro. J'espère que c'est d'une certaine utilisation? P>
IE6, IE7 et IE8 sont tous affectés.
Votre Cache-Control Strong> L'en-tête est incorrect. Il devrait être Cache-contrôle: max-Âge = 1 fort> avec le tiret au milieu. Essayez de résoudre ce premier pour voir si cela fait une différence. P>
Typiquement, je dirais que le coupable le plus probable est votre en-tête de Vary, car de tels en-têtes causent souvent des problèmes de mise en cache dans IE: http://blogs.msdn.com/ieinternalals/archive/2009/06/17/9769915.aspx . Vous voudrez peut-être essayer d'ajouter un Fiddler ne devrait avoir aucun impact sur la cache-câble (sauf si vous avez écrit des règles), et cela ressemble à vous dire que cela le fait, ce qui suggère qu'il y a peut-être un problème de synchronisation de quelque sorte. P>
> Ne pas enregistrer les pages cryptées sur l'option de sécurité de disque utilisée pour être désactivée par défaut em> p>
Cette option Incidemment, la raison pour laquelle vous voyez l'erreur de certificat lors de l'exécution de Fiddler est que vous n'avez pas élu pour faire confiance au certificat de racine de violon. Voir http://www.fiddler2.com/fiddler/help/htttpsdecryption.aspecta A> Pour plus sur ce sujet. P>
Merci pour votre réponse détaillée. J'ai corrigé l'en-tête de contrôle de cache et j'ai ajouté un éditeur, qui n'a pas non plus corrigé le problème. Après avoir décidé de faire confiance au certificat de racine de violoniste, je peux maintenant reproduire le problème lorsque Fiddler est en cours d'exécution. Avant de le faire, le PDF fonctionnerait après avoir cliqué sur "Continuer sur ce site (non recommandé)" Alors, comme si vous le souhaitez, peut-être un problème de synchronisation de quelque sorte.
Si, à l'intérieur de Fiddler, vous utilisez l'onglet Filtres pour supprimer l'en-tête de réponse "Vary", y a-t-il un changement?
Pas de changement après avoir retiré l'en-tête Vary ...: ~ \
Si le PDF n'est pas confidentiel, pourriez-vous m'envoyer un courrier électronique un fichier .saz exporté de Fiddler contenant la réponse PDF et éventuellement la page avant elle? Cela me permettra de reproduire votre problème exact dans la maison et d'obtenir, c'est-à-dire sous le débogueur. Mon adresse est Ericlaw chez Microsoft Dotcom.
J'ai lu de votre chaise de contrôle du cache-contrôle, mais je vais partager la mienne, qui a répondu à mes besoins , au cas où il aide. P>
Nous avons fait face à un problème similaire de longue durée - ce que nous avons fait était nous (c'est Java EE). Dans la configuration de l'application Web, nous ajoutons
Response.ContentType = "application/octet-stream"
Malheureusement, cela n'a pas aidé. : ~ /
Essayez de désactiver la compression GZIP. p>
Éteindre la compression GZIP n'a pas aidé. :(
Après deux semaines sur une chasse à l'oie sauvage, je n'ai pas été en mesure de trouver une combinaison de changements de code qui permettront à cette méthode de diffuser des documents PDF, Excel ou Word lorsque le ' ne permet pas de sauvegarder les pages cryptées sur le disque. L'option i> 'est allumée. P>
Microsoft a déclaré que ce comportement est par conception dans un certain nombre d'articles de KB et de courriels privés. Il semble que lorsque le ' ne sauvegardez pas les pages cryptées sur l'option Disque i>' est activé sur celui-ci, c'est-à-dire qui se comporte correctement et de faire ce qu'il est dit de faire. Cet article est la meilleure ressource que j'ai trouvée jusqu'à présent que explique pourquoi ce paramètre serait activé et les avantages et inconvénients de l'activer: P>
"Le ' ne sauvegardez pas les pages cryptées sur le disque i>' entre en jeu lors de la gestion des connexions SSL (https). Juste comme un serveur Web peut envoyer des informations faites sur la manière de mettre en cache un fichier un fichier En gros, définissez Internet Explorateur pour ne pas enregistrer les fichiers dans le cache lors d'une connexion SSL (HTTPS), peu importe si le serveur Web vous conseille. P>
Quel est l'avantage de tourner cette fonctionnalité, la sécurité est la principale raison pour laquelle la fonctionnalité est allumée. Les pages ne sont pas stockées dans le cache de fichiers Internet temporaire. P>
Quel est l'inconvénient? Performances lentes, car rien n'est sauvegardé dans le cache même que 1 image GIF d'octet utilisé une douzaine de fois sur la page doit être extraite à chaque fois. Pour aggraver les choses, certaines actions de l'utilisateur peuvent échouer, tels que les fichiers téléchargés seront supprimés et une erreur présentée ou ouvrant des documents PDF ne parviendront pas à nommer quelques scénarios. " P>
blockQuote>
blockQuote>
blockQuote>
La meilleure solution que nous pouvons trouver à ce stade est de communiquer à nos clients et aux utilisateurs que des alternatives existent à l'utilisation de ce paramètre: p>
"Utilisez" Dossier de fichiers Internet temporaire vide lorsque le navigateur est fermé '. Chaque fois que le navigateur ferme tous les fichiers sera purgé à partir du cache en supposant qu'il n'y a pas de verrouillage d'un fichier à partir d'une autre instance du navigateur ou d'une autre application externe. p>
Une grande considération doit être donnée avant d'utiliser ' Ne pas enregistrer des pages cryptées sur le disque i>'. Cela ressemble à une excellente fonctionnalité de sécurité et que les résultats de cette fonctionnalité peuvent entraîner des appels de votre service d'assistance pour augmenter les défaillances ou les performances lentes. " P>
blockQuote>
blockQuote>
blockQuote>
J'ai trouvé que cela semblait travailler pour moi:
J'ai eu un problème similaire avec les fichiers PDF que je voulais diffuser. Même avec Response.Clearheaders () Code> J'ai vu des en-têtes de pragma et de contrôle de cache ajoutés au moment de l'exécution. La solution consistait à effacer les en-têtes dans IIS (clic droit -> Propriétés de la page en chargement du PDF, puis sur l'onglet "HTTP Heaters"). P>
Résolu: c'est un problème c'est-à-dire, pas de l'aplication ... Fixez-le avec ceci: http://support.microsoft.com/kb/323308 Cela fonctionne parfaitement pour moi, après avoir essayé depuis longtemps. P>
ATT: M.dark P>
L'ajouter ici en espérant que quelqu'un pourrait trouver cela utile à la place des liens.
Voici mon code P>
byte[] bytes = // get byte array from DB Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.Buffer = true; // Prevent this page from being cached. // NOTE: we cannot use the CacheControl property, or set the PRAGMA header value due to a flaw re: PDF/SSL/IE Response.Expires = -1; Response.ContentType = "application/pdf"; // Specify the number of bytes to be sent Response.AppendHeader("content-length", bytes.Length.ToString()); Response.BinaryWrite(bytes); // Wrap Up Response.Flush(); Response.Close(); Response.End();
Comme l'OP, je me grattiais la tête pendant des jours d'essayer de faire fonctionner cela, mais je l'ai fait à la fin, je pensais que je partageais ma "combinaison" des en-têtes:
Je rencontrais un problème similaire pour tenter de diffuser un PDF sur SSL et de la mettre à l'intérieur d'un iframe ou d'un objet. J'avais constaté que ma page ASPX continuerait à rediriger la version non sécurisée de l'URL, et le navigateur le bloquerait. P>
J'ai trouvé passer d'une page ASPX à un gestionnaire ashx corrigé mon problème de redirection. p>