Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

alt linux sv 4.0 httpd2 mod_expires application/x-msdownload

24K
16 июля 2011 года
shraibikus
3 / / 19.01.2007
Здравствуйте. Есть такой вот сервер.
[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
с содержимым:
 
Код:
ExpiresActive On
ExpiresByType application/x-msdownload "access plus 5 seconds"


Тоже самое указал и в
/etc/httpd2/conf/sites-enabled


сделал
service httpd2 restart

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

Куда копать?

(На форуме Alt-Linux был: alt linux forum, там мне не подсказали =( )
14
16 июля 2011 года
Phodopus
3.3K / / 19.06.2008
mod_expires ничего на сервере не кеширует. До его подключения все было нормально?
12
16 июля 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: shraibikus

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


Expires ни чего кэшировать не может, он тупо отвечает за формирование Expires заголовков. Возможные причины проблемы:

1) между сервером и клиентом промежуточные кэширую хосты;
2) браузер может некорректно отрабатывать Expires заголовки и брать файл из своего локального кэша.

Обе проблемы спокойно решаются дописыванием к ссылке на файл параметра отражающего версию файла example.net/file.exe?version=...

в качестве version наиболее часто используют unix timestamp.

24K
17 июля 2011 года
shraibikus
3 / / 19.01.2007
Цитата: Phodopus
mod_expires ничего на сервере не кеширует. До его подключения все было нормально?


Я его и подключил, что-бы убрать кеширование этих файлов.
До него было все ровно так-же.


Цитата: alekciy
Expires ни чего кэшировать не может, он тупо отвечает за формирование Expires заголовков. Возможные причины проблемы:

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шник, а теперь его настроил я, и так сфейлил =(

24K
17 июля 2011 года
shraibikus
3 / / 19.01.2007
Всем спасибо! Решение с сылкой вида example.net/file.exe?version={timestamp} помогло.
Как сделал:

Создал папку file.exe на сервере вместо файла file.exe, а сам файл положил внутрь нее.
Т.е. теперь ссылка не example.net/file.exe, а example.net/file.exe/file.exe. Только внутри папки лежит index.php следующего содержания:
 
Код:
<?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 за наводку!
12
17 июля 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: shraibikus

Вариант с file.exe?version=... работает как? Т.е. если я в ссылке исправлю допустим с file.exe?version=1 на file.exe?version=2 то клиентский браузер скачает файл по новой (а не возьмет из кеша), даже если exe-шник не изменился?


Именно, в этом и заключает смысл это техники с version. Возникла она не просто так. В теории да, все выглядит просто чудесно, есть expires заголовки, их читают и исходя из этого обрабатывают. В реальном же мире даже если конечный клиент способен корректно обработать заголовки то между ним и сервером есть куча промежуточных хостов которые могут быть со старым ПО, а то и просто криво настроенные. Поэтому exires доверяй, в version юзай.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог