alt linux sv 4.0 httpd2 mod_expires application/x-msdownload
[quote="uname -a"]
Linux sv 2.6.18-std-smp-alt12 #1 SMP Mon Feb 11 00:44:54 MSK 2008 i686 GNU/Linux
[/quote]
Стоит httpd2 работает ок.
Подключил модуль mod_expires создав ссылку из
/etc/httpd2/conf/mods-available
в
/etc/httpd2/conf/mods-enabled
В корневую папку вебсервера регулярно падает самораспаковывающийся архив EXE:
/var/www/apache2/html/file.exe
Добавил в этой корневой папке веб-сервера файл .htaccess
с содержимым:
ExpiresByType application/x-msdownload "access plus 5 seconds"
Тоже самое указал и в
/etc/httpd2/conf/sites-enabled
сделал
service httpd2 restart
Но клиент при попытке скачать файл второй раз получает устаревшую закешированную версию (причем срок кеша как оказалось может быть очень огромным - до месяца).
Куда копать?
(На форуме Alt-Linux был: alt linux forum, там мне не подсказали =( )
Но клиент при попытке скачать файл второй раз получает устаревшую закешированную версию (причем срок кеша как оказалось может быть очень огромным - до месяца).
Expires ни чего кэшировать не может, он тупо отвечает за формирование Expires заголовков. Возможные причины проблемы:
1) между сервером и клиентом промежуточные кэширую хосты;
2) браузер может некорректно отрабатывать Expires заголовки и брать файл из своего локального кэша.
Обе проблемы спокойно решаются дописыванием к ссылке на файл параметра отражающего версию файла example.net/file.exe?version=...
в качестве version наиболее часто используют unix timestamp.
Я его и подключил, что-бы убрать кеширование этих файлов.
До него было все ровно так-же.
1) между сервером и клиентом промежуточные кэширую хосты;
2) браузер может некорректно отрабатывать Expires заголовки и брать файл из своего локального кэша.
Обе проблемы спокойно решаются дописыванием к ссылке на файл параметра отражающего версию файла example.net/file.exe?version=...
в качестве version наиболее часто используют unix timestamp.
Я Expires подключил что-бы подсказать клиентскому браузеру о том, что этот файл не нужно кешировать. Ситуация получилась уже после того, когда я определил что идет кеширование скачиваемого (не маленького) exe-шника (около 30 мбайт), причем интервал кеширования - до месяца (что меня ООчень удивило). Т.е., я расчитывал при помощи expiries решить проблему кешируемых exeшников, а он мне не помог. Или я его не правильно настроил?
1) есть такое дело, клиент на ссылку приходит с другого сайта, где есть nginx. Этот момент я как-то пропустил, смотрю сейчас;
2) я проверял в разных браузерах, разных версий - все отрабатывают так.
Вариант с file.exe?version=... работает как? Т.е. если я в ссылке исправлю допустим с file.exe?version=1 на file.exe?version=2 то клиентский браузер скачает файл по новой (а не возьмет из кеша), даже если exe-шник не изменился?
Сейчас ищу способы обойти вверху стоящий (не подвластный мне) nginx, либо вариант с подстановкой версии попробую (тут правда придется придумывать какой-то дополнительный скрипт, который обновляет и эту саму ссылку - находящуюся на другом сайте).
P.S. ситуация для корп. нужд (внутренняя), таким образом идет обновление - так схема построена. Используется корп. сайт где лежит эта ссылка (он для меня внешний и не подвластный), вся система была построена до меня. Раньше был другой сервер отдающий этот exeшник, а теперь его настроил я, и так сфейлил =(
Как сделал:
Создал папку file.exe на сервере вместо файла file.exe, а сам файл положил внутрь нее.
Т.е. теперь ссылка не example.net/file.exe, а example.net/file.exe/file.exe. Только внутри папки лежит index.php следующего содержания:
$sDateStamp = date("YmdHis");
$sUri = "http://example.net/file.exe/file.exe?version=".$sDateStamp;
header('Location: '.$sUri);
exit;
?>
Таким образом мы получаем file.exe прийдя на сайт по старой ссылке example.net/file.exe всегда закачивая, а не получая из кеша, даже через 1 секунду.
Спасибо, alekciy за наводку!
Вариант с file.exe?version=... работает как? Т.е. если я в ссылке исправлю допустим с file.exe?version=1 на file.exe?version=2 то клиентский браузер скачает файл по новой (а не возьмет из кеша), даже если exe-шник не изменился?
Именно, в этом и заключает смысл это техники с version. Возникла она не просто так. В теории да, все выглядит просто чудесно, есть expires заголовки, их читают и исходя из этого обрабатывают. В реальном же мире даже если конечный клиент способен корректно обработать заголовки то между ним и сервером есть куча промежуточных хостов которые могут быть со старым ПО, а то и просто криво настроенные. Поэтому exires доверяй, в version юзай.