Браузер не будет запрашивать последний PDF-файл с сервера

У меня есть PDF-файл на веб-сервере IIS Windows Server, где пользователи запрашивают его с помощью IE8/9/10, используя HTTP-вызов, подобный этому...

http: // mydomain.com / somefolder / myFile.pdf

Первый хит загрузит файл без проблем. Проблема: если администратор обновляет PDF-файл, а пользователь возвращается, чтобы перезагрузить его, IE показывает только локальную кешированную версию и НЕ будет запрашивать новую версию с сервера.

Я подтвердил, что по второму запросу IE8, IE9 и IE10 вообще не вызывают сервер для файла PDF. Даже условный запрос (например, if-updated-since). Подтвердил это с помощью Fiddler и WireShark. Но я никогда явно не устанавливал кеширование с помощью Max-Age или чего-то еще. У меня нет кеширования для этой папки. Я бы предпочел не устанавливать для кеша «немедленное истечение срока действия». Он делает это и для Word DOC.

Есть ли в Internet Explorer ошибка, из-за которой он ВСЕГДА использует локальные копии статических документов (например, PDF-файлов, DOC-файлов), несмотря ни на что?

Эти идеи НЕ работают:

  1. F5, CTRL+F5, SHIFT+F5

  2. Очистите историю браузера и кэш с помощью кнопки УДАЛИТЬ ИСТОРИЮ. Почему это на самом деле не очищает ВЕСЬ кеш, мне не понятно. У меня все выбрано для удаления, кроме паролей.

Единственные известные мне способы решения этой проблемы:

  1. Вручную удалите PDF-файл локально, потому что кнопка «УДАЛИТЬ ИСТОРИИ» не удаляет локальную версию. Но большинство пользователей не настолько сообразительны.

  2. Используйте Firefox, но это не одобренный компанией браузер. Не заводи меня.

  3. Установите для кэширования сервера значение «Срок действия немедленно», но pdf-файлы смешаны в папках с веб-страницами, и я предпочитаю этого не делать. Я хочу использовать кеширование максимального возраста для других вещей, таких как CSS, скрипты, изображения и т. д.

  4. Добавьте поддельную строку запроса в конец, например ?id=1, и это сработает, но в бизнес-направлении есть сотни документов, каждый со ссылками внутри документов, которые необходимо обновить.

  5. Используйте кнопку FIDDLER «очистить кеш» или CCleaner, но большинство пользователей в моей компании (70 тысяч сотрудников) не являются разработчиками и не могут иметь это программное обеспечение.

Есть ли реальное решение для этого, чтобы заставить IE вести себя так, как я думал?


person James Allen    schedule 05.08.2014    source источник
comment
У меня была та же проблема, и я решил решить ее, установив немедленное истечение срока действия кеша на стороне клиента на сайте IIS с помощью настройки заголовков ответа, используя простой подход, описанный в iis.net/configreference/system.webserver/staticcontent/. Меня удивило, что мне пришлось использовать этот параметр, потому что раньше я вообще не устанавливал никаких настроек кэширования, но, по-видимому, IE использует какую-то другую стратегию кэширования по умолчанию, если в заголовке ответа не указано ничего (что является значением по умолчанию IIS), по сравнению, например, с Хром.   -  person tholesen    schedule 05.07.2016


Ответы (2)


Мне удалось изменить файл htaccess, чтобы добавить возраст к кешу pdf-файлов. Это отлично сработало для решения этой проблемы в IE и других браузерах, где проблема была устранена обновлением или повторным открытием браузера.

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

<FilesMatch ".(pdf)$">
  Header set Cache-Control "max-age=0"
</FilesMatch>

</IfModule>
person GNakano    schedule 15.05.2015

Подобно ответу GNakano об использовании срока действия кеша для каждого типа файла с использованием .htaccess (в Apache), в следующем сообщении описывается, как установить срок действия кеша для каждого каталога с помощью web.config в IIS: Как настроить статический кэш содержимого для каждой папки и расширения в IIS7?

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

person tholesen    schedule 05.07.2016