Меня попросили выполнить требование безопасности, чтобы браузеры не кэшировали конфиденциальные данные. Это нормально для содержимого 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 отображается в новом окне браузера. При включенном кэшировании окно браузера открывается, но остается совершенно пустым.