ASP.NET 2.0 のブラウザーに PDF をストリーミングしています。これは、HTTP 経由のすべてのブラウザー、およびHTTPS 経由の IE を除くすべてのブラウザーで機能します。私の知る限り、これは IE のすべてのバージョンで (過去 5 年間ほど) 機能していましたが、クライアントから問題が報告され始めたのはごく最近のことです。暗号化されたページをディスクに保存しないというセキュリティ オプションがデフォルトで無効になっていて、ある時点でデフォルトで有効になったのではないかと思います ([インターネット オプション] -> [詳細] -> [セキュリティ]) 。このオプションをオフにすると、回避策として役立ちますが、長期的な解決策としては実行できません。
私が受け取っているエラーメッセージは次のとおりです。
Internet Explorer は、www.sitename.com から OutputReport.aspx をダウンロードできません。
Internet Explorer はこのインターネット サイトを開くことができませんでした。要求されたサイトは利用できないか、見つかりません。後でもう一度やり直してください。
PDF の作成に使用されるツールは、DataDynamicsの ActiveReports です。PDF が作成されたら、それを送信するコードを次に示します。
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()
注: cache-control を明示的に指定しないと、.NET が代わりに no-cache を送信するため、cache-control を private または public または maxage=# に設定しようとしましたが、どれも機能していないようです。
ひねりがあります。Fiddler を実行して応答ヘッダーを検査すると、すべて正常に動作します。私が受け取るヘッダーは次のとおりです。
HTTP/1.1 200 OK
Cache-Control: max-age=1
Date: Wed, 29 Jul 2009 17:57:58 GMT
Content-Type: application/pdf
サーバー: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By : ASP.NET
X-AspNet-Version: 2.0.50727
content-disposition: attachment; filename=statement.pdf
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: チャンク
Fiddler をオフにして再試行するとすぐに、再び失敗します。私が気付いたもう 1 つのことは、Fiddler が実行されているときに、この Web サイトのセキュリティ証明書に問題がありますという警告メッセージが表示されることです。Fiddler がオフの場合、このセキュリティ警告は表示されず、すぐに失敗します。
Fiddler とブラウザの間で何が起こっているのか知りたいので、Fiddler が実行されているときは機能しますが、実行されていないときは壊れますが、さらに重要なことに、コードを変更して PDF を IE にストリーミングすると、変更を加えることなく機能する方法を知っている人はいますか?クライアントマシンに?
更新: Fiddler の問題は解決されました。EricLaw に感謝します。したがって、一貫して動作するようになりました (Fiddler の実行の有無にかかわらず、壊れています)。
Google の検索に基づくと、この同じ問題のレポートがウェブ全体にたくさんあるようです。それぞれのケースで問題を解決しているように見える応答ヘッダーの独自の組み合わせがあります。ETag、LastModified 日付の追加、Vary ヘッダーの削除 (Fiddler を使用)、および Cache-Control や Pragma ヘッダーの多数の組み合わせなど、これらの提案の多くを試しました。「Content-Transfer-Encoding: binary」と ContentType の「application/force-download」を試しました。これまでのところ何も役に立ちませんでした。Microsoft KBの記事がいくつか ありますが、そのすべてがCache-Control: no-cacheが原因であることを示しています。他のアイデアはありますか?
更新:ところで、完全を期すために、これと同じ問題が Excel および Word の出力でも発生します。
更新:進展はありません。Fiddler から EricLaw に .SAZ ファイルを電子メールで送信したところ、彼は IE のデバッグ中に問題を再現できましたが、まだ解決策はありません。バウンティの有効期限が切れる...