Правильный способ иметь ASP.NET / IIS НЕ кешировать PDF-файлы - PullRequest
9 голосов
/ 23 ноября 2011

У меня есть следующий сценарий, и я хотел предложения о том, как лучше всего справиться с этим. Мое веб-приложение (ASP.NET 2.0 / IIS 6) создает файлы PDF, и у меня есть страница результатов со ссылками на эти файлы PDF.

Теперь я заметил, что если я захожу на страницу результатов, нажимаю PDF-файл (он открывается в новом окне), затем заново генерирую PDF-файл и нажимаю на ту же ссылку на странице результатов, OLD PDF отображается вместо нового. Мне пришлось удалить временные интернет-файлы, чтобы увидеть новый.

Итак, поскольку я НЕ обслуживаю ASPX, который на самом деле записывает PDF (и я не хочу отображать диалоговое окно «Сохранить»), а имею прямую ссылку на файл PDF, я хочу знать, как лучше всего убедиться пользователь всегда видит последний файл на сервере, а не кэшированную версию.

Полагаю, о добавлении заголовков без кэша не может быть и речи. Но запрос PDF все равно будет проходить через обработчик HTTP, поэтому я хотел бы знать, должен ли я создать конкретный обработчик HTTP для перехвата запросов на PDF-файлы, или я должен делать это на уровне IIS ... однако я не обязательно Я хочу избежать кэширования ВСЕХ PDF на этом сайте.

Есть предложения? Заранее спасибо за помощь.

Ответы [ 3 ]

12 голосов
/ 23 ноября 2011

Если к вашей ссылке на документ pdf добавлена ​​уникальная строка запроса, я считаю, что это предотвратит кеширование.Время в тиках хорошо использовать, например:

string.Format("{0}?t={1}", pdfFileUrl, DateTime.Now.Ticks);
5 голосов
/ 15 мая 2013

У меня просто была похожая проблема. У меня есть моя страница, позволяющая пользователям вводить данные и генерировать новый файл в формате PDF. Новый файл PDF перезаписывает старый. В IE8, когда пользователь нажимает ссылку pdf после сохранения, старый pdf всегда отображается (пользователю необходимо очистить кэш, чтобы отобразить новый). После нескольких часов поиска я обнаружил, что в IIS6 перейдите в «Кэширование вывода», добавьте новое правило кеширования с расширением файла «.aspx», отметьте «Кэширование в пользовательском режиме» и «Кэширование в режиме ядра», затем в обоих параметрах выберите «Запретить все кеширование». Это работает для меня!

2 голосов
/ 23 ноября 2011

Тот факт, что очистка ваших временных интернет-файлов дала вам новую версию, показывает, что браузер является источником кеша. Вы можете отключить кэширование iis, но это не остановит прокси-серверы, кэширующие документ. Если вам нужно быть на 100% уверенным, что пользователь увидит эту последнюю версию, я предлагаю использовать значение строки запроса, чтобы URL-адрес был другим. Строка запроса может быть меткой времени создания PDF.

...