Как предотвратить кэширование при использовании потоковой передачи PDF с Acrobar Reader 10.0 (HTTP1.0 / HTTP1.1) - PullRequest
7 голосов
/ 18 января 2011

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

FireFox и Chorme прекрасно справляются со следующими заголовками и не кэшируют файлы PDF:

Response.AddHeader ("Pragma", "no-cache, no-store"); Response.AddHeader («Cache-Control», «без кэширования, без сохранения, необходимо подтвердить заново, max-age = 0»); Response.AddHeader ("Expires", "-1");

Хотя IE 7 (с программой Acrobat Reader 9.4.1) работает только со следующими заголовками и предотвращает кэширование документа PDF:

Response.AddHeader ("Pragma", "no-cache, no-store"); Response.AddHeader ("Cache-Control", "private, must-revalidate, max-age = 0"); Response.AddHeader ("Expires", "-1");

Когда я пытался использовать IE 7 с Acrobat Reader 10, приведенный выше заголовок не изменился и кэшировал PDF независимо от того, что я пробовал.

Когда я пытаюсь поставить Cache-Control: no-cache, no-store, pdf вообще не загружался. Насколько я понимаю, IE использует механизм кэширования для загрузки документов PDF.

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

Ответы [ 4 ]

7 голосов
/ 12 июля 2012

Добавьте случайное число к URL-адресу, либо в пути, либо в строке запроса.Таким образом, он будет загружать файл каждый раз.Вы также можете изменить только номер, если файл изменился, например, используя mtime файла.

PHP (поскольку это понимают все, даже если это никому не нравится):

 <a href="document.pdf?buster=<?= time() ?>">Download PDF</a>
1 голос
/ 19 сентября 2011

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

К сожалению, ребята из M $ сказали, что это «работает как задумано», и пользователям не следует использовать заголовок без кэширования ... иди на цифру.

Вы можете попробовать идею VSU об использованииJava PDF Reader ... Я тоже могу пойти по этому пути.

0 голосов
/ 21 января 2011

Вы можете закодировать дату времени в имя файла PDF, чтобы каждый раз при выполнении запроса имя файла было уникальным.

Response.AddHeader "Content-Disposition","attachment;filename=somename" + CurrentDate() + Currenttime() ".pdf"

CurrentDate и CurrentTime - мнимые функции. Вам нужно написать этот код.

0 голосов
/ 19 января 2011

Управление настройками кеша по трубе не является надежным.Альтернативой является кодирование реального времени и даты в имени файла PDF.

...