Невозможно отобразить PDF из HTTPS в IE 8 (на 64-разрядной версии Vista)

У меня есть домашний сервер HTTPS, который обслуживает простые файлы (он встроен в мое приложение). Он отлично работает – использовал его навсегда.

Недавно добавленная поддержка SSL – Chrome, FireFox и IE все понравятся и загружают страницы просто отлично.

Проблема, которую я нахожу, это когда я пытаюсь загрузить файл PDF по HTTPS-соединению. По какой-то причине PDF никогда не отображается в IE 8 (64-разрядная версия на 64-разрядной версии Vista). Он отлично работает в Chrome. И он отлично работает в IE 8 при использовании простого HTTP-протокола – только при использовании HTTPS.

ПРИМЕЧАНИЕ. Когда упоминается IE 8, это 32-разрядный IE 8 на 64-битной Vista, хотя 64-разрядный IE 8 имеет такое же поведение.

Это заставляет меня думать, что это проблема IE 8 / HTTPS / PDF / 64-разрядной ОС, но я не уверен.

DebugBar для IE 8 показывает, что запрос и ответ прошли точно так, как ожидалось, – никаких ошибок вообще. В IE 8 отсутствуют какие-либо ошибки или что-то еще – чистый белый экран (или страница, которая была отображена до того, как я попытался загрузить PDF-файл). Очищенный кеш / cookies / и т. Д.

Существуют ли какие-либо известные проблемы с IE / PDF / HTTPS?

Думал, что вернусь и даю окончательный ответ.

Спасибо всем, кто предложил «Не сохранять зашифрованные страницы на диск».

Я последовал совету Эрик Лоу и поставил:

Cache-Control: private 

Я также обнаружил, что у меня есть Pragma: no-cache , который я удалил.

Сейчас работает как шарм 🙂

Я столкнулся с этой же проблемой и мог заставить ее работать, попросив пользователя изменить свои параметры безопасности, чтобы отключить. Не сохраняйте зашифрованные страницы на диске на вкладке «Дополнительно» диалогового windows «Свойства Интернета»: http://support.microsoft .com / кб / 812935

… затем с мгновенной паникой я начал смотреть на код (ASP.NET с помощью VB). Я использовал fiddler и обнаружил, что даже когда я не указывал заголовок управления кешем, казалось, что Framework автоматически определял для меня отсутствие магазина. Ключ к решению проблемы был на самом деле в этом вопросе PHP . Установив заголовок управления кешем max-age = 1, файл будет кэшироваться в течение 1 секунды, достаточно для Adobe Reader, чтобы забрать его с диска и загрузить его в память. Я обновил наш код, чтобы сгенерировать PDF следующим образом:

 Response.ClearContent() Response.ClearHeaders() Response.AddHeader("cache-control", "max-age=1") Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "attachment; filename=whatever.pdf") Response.AddHeader("content-length", mem_stream.Length.ToString) Response.BinaryWrite(mem_stream.ToArray()) Response.Flush() Response.End() , Response.ClearContent() Response.ClearHeaders() Response.AddHeader("cache-control", "max-age=1") Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "attachment; filename=whatever.pdf") Response.AddHeader("content-length", mem_stream.Length.ToString) Response.BinaryWrite(mem_stream.ToArray()) Response.Flush() Response.End() 

Обновление: я думал, что это работает, но, наверное, я говорил слишком рано. Я создал новый вопрос, который должен пройти через эту проблему.

 response.setHeader("Cache-Control","private"); 

сделал трюк для нас в IE8 и IE9.

Это не требует изменения настроек в браузере.

У меня была аналогичная проблема с IE8 и https. Когда я попытался передать PDF в новое окно, вместо этого я получил пустую html-страницу (она работала в FireFox, и если она не была через https). После большого поиска и поиска различных вариантов заголовков ответов решение для меня заключалось в том, чтобы установить:

Response.AppendHeader("Accept-Ranges", "none");

Это загружает весь pdf-файл перед его открытием, который менее удобен для пользователя, если он является очень большим pdf. Но в моем случае большинство PDF-страниц было всего лишь несколькими страницами. Надеюсь, это поможет кому-то.

Я не вижу ссылки на .NET в вашем вопросе, но я собираюсь предоставить соответствующее решение. Надеюсь, вы можете извлечь из этого то, что вам нужно, и разработчики, полагая, что ваш вопрос относится к .NET, могут также найти в нем ценность.

Вот метод, который я использовал ранее для рендеринга в браузере PDF-файлов через HTTPS без ** кэширования.

  private void RenderPdfToResponse(byte[] documentBytes) { Response.BufferOutput = true; Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Cache-control", "no-store"); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Length", documentBytes.Length.ToString()); Response.BinaryWrite(documentBytes); Response.Flush(); HttpContext.Current.ApplicationInstance.CompleteRequest(); } ,  private void RenderPdfToResponse(byte[] documentBytes) { Response.BufferOutput = true; Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Cache-control", "no-store"); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Length", documentBytes.Length.ToString()); Response.BinaryWrite(documentBytes); Response.Flush(); HttpContext.Current.ApplicationInstance.CompleteRequest(); } 

** Существует псевдо-кеш, который достаточно длительный, чтобы Adobe Reader мог загружать PDF-файл. Я искал ссылку, описывающую, о чем я говорю, и случайный форум – это лучшее, что я мог сделать:

IE сохраняет PDF в выделенной «изменчивой» памяти и помещает указатель в% system% Temp. Это единственное место, где хранится файл. Указатель удаляется, и выделенная память освобождается, как только Adobe Reader закрывается.

Я не могу ручаться за техническую точность этого, но он отражает то, что я наблюдал, используя метод выше. На самом деле, я думаю, что файл исчезнет с момента завершения загрузки в Adobe Reader (в браузере).

Вы используете 32-разрядную или 64-разрядную версию IE на Vista 64? Он поставляется с обоими. В большинстве случаев 32-разрядная версия используется, так как не многие плагины поддерживают 64-разрядную версию.

Я бы посмотрел, есть ли разница между ними. Если он работает в IE 8 32 бит на Vista 64, это может быть проблемой с 64-разрядной версией объекта вспомогательного браузера (BHO).

Кроме того, проверьте, есть ли у диспетчера задач наличие * * 32 после имени процесса, если другие браузеры работают в 32-битном режиме.

Еще одна вещь, которую я хотел бы проверить, является ли HTTPS причиной того, что IE8 не кэширует файл PDF по какой-либо причине (трафик HTTPS обычно не кэшируется). Я бы запустил procmon, чтобы увидеть, замечаете ли вы файл PDF, который записывается в файловую систему. Могут быть настройки политики, которые могут потребоваться изменить. Я не уверен, есть ли альтернативный способ сказать, что у вас есть PDF-файл, который не должен записываться на диск, но может отображаться.

Как пользователь, у меня была такая же проблема с загрузкой файлов PDF из Schwab.com. Совет «выключить» Не сохранять зашифрованные страницы на диск на вкладке «Дополнительно» диалогового windows «Свойства Интернета»: http://support.microsoft.com/kb/812935 «работал для меня.

Мое решение (нам потребовались дни, чтобы играть с заголовками, чтобы заставить это работать):

  if (System.Web.HttpContext.Current.Request.Browser.Browser == "InternetExplorer" && System.Web.HttpContext.Current.Request.Browser.Version == "8.0") { System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.ClearContent(); System.Web.HttpContext.Current.Response.ClearHeaders(); System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream"; System.Web.HttpContext.Current.Response.AppendHeader("Pragma", "public"); System.Web.HttpContext.Current.Response.AppendHeader("Cache-Control", "private, max-age=60"); System.Web.HttpContext.Current.Response.AppendHeader("Content-Transfer-Encoding", "binary"); System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + document.Filename); System.Web.HttpContext.Current.Response.AddHeader("content-length", document.Data.LongLength.ToString()); System.Web.HttpContext.Current.Response.BinaryWrite(document.Data); } 

Надежда, которая помогает кому-то

  • Доступ к XMLHttpRequest запрещен с помощью AngularJS для любой версии IE ниже 10
  • Мета-элемент IE11 Перерывы SVG
  • Угловой 2/4/5 не работает в IE11
  • CSS3 PIE - Предоставление поддержки пограничного радиуса IE не работает?
  • Interesting Posts

    Зависимость впрыска wcf

    Как использовать .htaccess в WAMP Server?

    Скопировать строки из одного Datatable в другой DataTable?

    Сервер совершил нарушение протокола. Раздел = ResponseStatusLine ОШИБКА

    Установка двух мониторов с одной или двумя видеокартами

    Как исправить сглаживание шрифтов в IntelliJ IDEA при использовании высокого DPI?

    Каков наилучший способ выполнения ежедневных / еженедельных / ежемесячных резервных копий?

    Как полностью отключить функции планшета в Windows 7?

    Как обнаружить разъединение сокета TCP (с гнездом C Berkeley)

    Является ли более высокая частота ядра или более высокая тактовая частота более полезной для производительности компьютера?

    TThreadedQueue не способен к нескольким потребителям?

    Как исправить INSTALL_PARSE_FAILED_MANIFEST_MALFORMED в приложении для Android

    Как преобразовать std :: string в LPCWSTR в C ++ (Unicode)

    Искра: Лучшая практика для извлечения больших данных из RDD на локальную машину

    MySql суммирует элементы столбца

    Давайте будем гением компьютера.