IE не показывает PDF с отключенным кэшированием - PullRequest
1 голос
/ 10 ноября 2010

Меня попросили выполнить требование безопасности, чтобы браузеры не кэшировали конфиденциальные данные. Это нормально для содержимого ASPX, используя стандартные инструкции:

        Response.Expires = -1;
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();

Однако, когда я установил эти заголовки для загрузки PDF, IE8 не будет показывать PDF (еще не пробовал другие версии IE, вроде как, мне нужно, чтобы он работал на всех них, даже на IEfreaking6). Кажется, работает в бета-версии Firefox 4, но я не дважды проверил, что он определенно не кеширует его. Вот сокращенная версия кода, который я использую для обслуживания файлов PDF:

        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.Buffer = true;

        //This stops the PDFs from being viewed :(
        //Response.Expires = -1;
        //Response.Cache.SetCacheability(HttpCacheability.NoCache);
        //Response.Cache.SetNoStore();

        Response.ContentType = mime;
        Response.AddHeader("Content-Disposition", disposition);

        Response.BinaryWrite(file);

        Response.End();

Где в случае PDF-файлов тип mime установлен на:

       private const string mimeTypePDF = "application/pdf";

Расположение установлено на:

       var disposition = String.Format("{0};filename=\"{1}\"", SendInline ? "inline" : "attachment", Path.GetFileName(filename));

Я собираюсь поиграть немного больше, возможно, заставив их загрузить, так как mimetype «application / octet-stream» может работать, но это остановит работу открытых открытых PDF-файлов в новом окне браузера.

Кто-нибудь имел успех в том, чтобы запретить IE кэшировать PDF-файлы со стороны сервера и успешно отображать их?

Просто чтобы дать ясный пример того, что происходит. В одном сценарии пользователь может выбрать группу отчетов из списка, они скомпилированы в PDF, и PDF отображается в новом окне браузера. При включенном кэшировании окно браузера открывается, но остается совершенно пустым.

Ответы [ 5 ]

2 голосов
/ 10 ноября 2010

У меня была такая же проблема с IE несколько лет назад, и пусть это кеш, так как у меня не было требования запретить его.

Однако, поскольку пользователи могут сохранять документ PDF после того, как браузер показывает его, как вы планируете запретить им делать это?

Не то чтобы это решило вашу проблему, но при отправке физических файлов вы должны использовать Response.TransmitFile вместо BinaryWrite. Это намного быстрее и эффективнее с точки зрения использования памяти, поскольку вам не нужно загружать весь файл в память перед отправкой.

1 голос
/ 27 июля 2011

Похоже, что эта проблема была решена в IE9.

Теперь я могу успешно выполнить следующее:

    Response.Expires = -1
    Response.Cache.SetNoStore()
    Response.AppendHeader("Pragma", "no-cache")
    Response.ContentType = "application/pdf"
    Response.BinaryWrite(myByteBuffer)
    Response.Flush()
    Response.Close()

Наслаждайтесь!

0 голосов
/ 19 сентября 2011

Эта проблема с отображением pdf (и других типов документов) в браузере с использованием заголовка no-cache была зарегистрирована как ошибка для Microsoft: http://support.microsoft.com/kb/316431. Когда вы пытаетесь открыть документ в этомВ этом случае IE пытается прочитать его из кэша, но его там нет.

К сожалению, ребята из M $ сказали, что это «работает как задумано», и пользователи не должны использовать заголовок no-cache ...пойди разберись.

0 голосов
/ 17 мая 2011

Я также считаю, что это ошибка в Internet Explorer. Я установил заголовок cache-control на no-cache и у меня возникла та же проблема. Также обратите внимание, что в «Свойства обозревателя»> «Дополнительно»> «Безопасность» есть параметр «Не сохранять зашифрованные страницы на диск», который может повлиять на него.

Удаление заголовка cache-control из ответа разобрало мою проблему. Затем я также попытался проверить вышеупомянутый вариант, и мне показалось, что он работает еще лучше. Вместо того, чтобы хранить PDF-файл в %LocalAppData%\Microsoft\Windows\Temporary Internet Files, на самом деле в IE8 появилось диалоговое окно, позволяющее мне выбрать, где его сохранить (что на самом деле и было в моем случае).

0 голосов
/ 23 ноября 2010

Я хочу сказать, что в настоящее время это невозможно, ничего из того, что я пытался, казалось, заставило его работать.Попробуйте и заставьте своих клиентов использовать Firefox!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...