Я передаю PDF в браузер в ASP.NET 2.0. Это работает во всех браузерах через HTTP и обо всех браузерах except 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 отправит от моего имени кеш-кеш, поэтому я попытался настроить кеш-контроль для: private или public или maxage = #, но ни один из них не выглядит работа.
Вот твист: когда я запускаю Fiddler для проверки заголовков ответов, все работает нормально. Я получаю следующие заголовки:
HTTP/1.1 200 OK
Cache-Control: max-age = 1
Дата: ср, 29 июл 2009 17:57:58 GMT
Content-Type: application/pdf
Сервер: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-версия: 2.0.50727
content-disposition: attachment; filename = statement.pdf
Content-Encoding: gzip
Vary: Accept-Encoding
Передача-кодирование: chunked
Как только я выключу 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.
Обновление: Прогресс не достигнут. Я отправил файл SAS из Fiddler в EricLaw, и он смог воспроизвести проблему при отладке IE, но пока нет решений. Bounty истекает...