Предотвращение кэширования браузером связанного файла - PullRequest
1 голос
/ 15 июля 2010

Мне было поручено поддерживать сайт PHP с функцией, которая автоматически генерирует RTF-файлы и предоставляет ссылку для загрузки. Каждый раз ранее созданный файл перезаписывается новым.

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

Мне удалось обойти эту проблему, присвоив каждому сгенерированному файлу уникальное имя на основе текущей метки времени, но это создает много беспорядка в каталоге, который необходимо периодически очищать. В идеале я хотел бы пометить этот файл так, чтобы браузер не кэшировал его и каждый раз получал последнюю версию. Как мне этого добиться?

Ответы [ 4 ]

5 голосов
/ 15 июля 2010

В дополнение к возможности добавления случайной строки GET к URL (часто это самый простой способ), можно также решить эту проблему, отправив нужные заголовки.

Поскольку вы генерируете статические файлы, для этого потребуется настройка в файле .htaccess. Это должно выглядеть так:

<FilesMatch "\.(rtf)$">
Header set Cache-Control "no-store"
</FilesMatch>
1 голос
/ 15 июля 2010

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

... / file.rtf? 15072010141000

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

0 голосов
/ 15 июля 2010

Хотя простое решение использования заголовка без кэширования, предложенное Pekka, будет работать, вы потеряете потенциальную выгоду от кэширования, если один и тот же файл будет загружен несколько раз.

Если RTF-файл имеет большой размер и вы хотите, чтобы пользователь получал выгоду от кэширования, когда файл фактически не изменяется, вы можете проверить этот ответ:

Как использовать заголовки кеша HTTP с PHP

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