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


Answers

Я столкнулся с этой же проблемой и мог заставить ее работать, попросив пользователя изменить свои параметры безопасности, чтобы отключить. Не сохраняйте зашифрованные страницы на диске на вкладке «Дополнительно» диалогового окна «Свойства Интернета»: 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()                                

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

Question

У меня есть домашний сервер 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-файл). Очищенный кеш / файлы cookie / и т. Д.

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




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

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

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

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




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

            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);
            }

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




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

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

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