Генерация PDF, ошибка с IE и HTTPS - PullRequest
12 голосов
/ 29 июля 2009

Я транслирую PDF в браузер в ASP.NET 2.0. Это работает во всех браузерах по HTTP и во всех браузерах , кроме IE по HTTPS. Насколько я знаю, это работало (последние 5 лет или около того) во всех версиях IE, но наши клиенты только недавно начали сообщать о проблемах. Я подозреваю, что опция безопасности Не сохранять зашифрованные страницы на диск раньше была отключена по умолчанию и в какой-то момент стала включена по умолчанию (Свойства обозревателя -> Дополнительно -> Безопасность). Отключение этой опции помогает в качестве обходного пути, но не является жизнеспособным в качестве долгосрочного решения.

Я получаю сообщение об ошибке:

Internet Explorer не может загрузить файл OutputReport.aspx с веб-сайта www.sitename.com.

Internet Explorer не смог открыть этот интернет-сайт. Запрашиваемый сайт либо недоступен, либо не найден. Пожалуйста, попробуйте позже.

Инструментом, используемым для создания PDF, является ActiveReports из DataDynamics . После того, как 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()  

Примечание. Если я не укажу явно управление кэшем, тогда .NET отправляет no-cache от моего имени, поэтому я попытался установить управление кэшированием: private или public или maxage = #, но, похоже, ни один из них работа.

Вот поворот: когда я запускаю Fiddler для проверки заголовков ответов, все работает нормально. Заголовки, которые я получаю:

HTTP / 1.1 200 OK
Контроль кэша: max-age = 1
Дата: среда, 29 июля 2009 г. 17:57:58 GMT
Тип контента: приложение / pdf
Сервер: Microsoft-IIS / 6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-версия: 2.0.50727
содержание-расположение: вложение; имя_файла = Statement.pdf
Контент-кодировка: gzip
Варьируется: Accept-Encoding
Передача-кодировка: чанкованная

Как только я выключаю Fiddler и пытаюсь снова, он снова выходит из строя. Еще одна вещь, которую я заметил, это то, что когда Fiddler работает, я получаю Возникла проблема с предупреждающим сообщением сертификата безопасности этого веб-сайта, и я должен нажать Перейти на этот сайт (не рекомендуется) чтобы пройти. Когда Fiddler выключен, я не сталкиваюсь с этим предупреждением безопасности, и оно сразу перестает работать.

Мне любопытно, что происходит между Fiddler и браузером, чтобы он работал, когда Fiddler работает, но ломался, когда его нет, но, что более важно, у кого-нибудь есть идеи, как я могу изменить свой код, чтобы потоковая передача PDF-файлов в IE работала без внесения изменений на клиентский компьютер?

Обновление: Проблемы с Fiddler решены, большое спасибо EricLaw, поэтому теперь он ведет себя согласованно (не работает, работает или нет Fiddler).

По результатам поиска в Google, по всей видимости, существует множество сообщений об этой же проблеме по всему Интернету, каждый из которых имеет свою собственную конкретную комбинацию заголовков ответов, которые, похоже, решают проблему в отдельных случаях. Я попробовал многие из этих предложений, включая добавление ETag, дату LastModified, удаление заголовка Vary (с помощью Fiddler) и десятки комбинаций заголовков Cache-Control и / или Pragma. Я попробовал «Content-Transfer-Encoding: binary», а также «application / force-download» для ContentType. Пока ничего не помогло. Есть несколько Microsoft KB статей , все из которых указывают, что Cache-Control: no-cache виновник Есть еще идеи?

Обновление: Кстати, для полноты, такая же проблема возникает и с выходами Excel и Word.

Обновление: Нет прогресса. Я послал по электронной почте файл .SAZ из Fiddler в EricLaw, и он смог воспроизвести проблему при отладке IE, но пока нет решений. Щедрость истекает ...

Ответы [ 12 ]

0 голосов
/ 10 августа 2009

Я читаю о вашей погоне за гусиной в Cache-control, но я поделюсь моей, которая отвечала моим потребностям , на случай, если это поможет.

0 голосов
/ 29 июля 2009

Какая версия IE? Напомню, что Microsoft выпустила исправление для IE6 для этой проблемы. Надеюсь, что это полезно?

...