Скачивание закешированного файла
Некий PHP-скрипт генерирует .xls файл - счёт по заказу. Если его скачать, внести изменения в заказ и перегенерировать .xls, то файл соответственно изменяется с учётом изменений, однако браузер "скачивает" первоначальную версию файла, делая вид, что скачивает новую.
Проходит около часа без всяких изменений заказа и браузер скачивает уже нормальный новый .xls файл.
Отсюда мысли о неудалённом кеше.
Вопрос: Кеш ли это? Как можно генерировать файл .xls указав, что кеш надо потереть? Как можно скачивать файл, указав, что надо скачать именно новый, не закешированный файл? Варианты с изменением имени файла (с добавлением UNIX метки) не подходят по условию задачи.
Ответы (1 шт):
Достаточно передать заголовок Cache-Control: no-cache
Вариант 1: Настроить заголовки посредством вашего веб серверка
К примеру для nginx:
location ~* \.(?:xls)$ {
expires -1;
}
Apache2
<filesMatch "\.(xls)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
Работает как в файле .httaccess так и в вашем конфиге
Вариант 2: Обрабатывать запрос к файлу средствами самого php, К примеру по запросу на адресс example.com/xls
И отдавать сам файл к примеру таким образом
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=\"filename.xlsx\"");
header("Cache-Control: max-age=0");