Всем привет. Есть сайт на codeighniher, прикол в следующем. Если, я что-то меняю в стилях или js, в отдельных файлах, то, чтобы получить изменение мне нужно обновить страницу с очисткой кэша (ctrl+f5 в chrome) .
Если просто обновить страницу то никаких изменений по сайту нету.
Если писать стили в самом html, то без проблем меняется информация простым f5.
В чем может быть проблема? Где копать? На всяких случай скидываю файл htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index.php|js|images|stylesheets|robots.txt)
RewriteRule ^(.*)$ index.php?/$1 [L]
AddDefaultCharset utf-8
<Files *>
Header set Cache-Control: "private, pre-check=0, post-check=0, max-age=0"
Header set Expires: 0
Header set Pragma: no-cache
</Files>
Если Nginx стоит перед Apache и настроен для быстрой отдачи статики (CSS, JS, картинки), и управление Apache даже не передается. Поэтому настройки из .htaccess не влияют на заголовки, а Nginx часто настраивают на длительное кеширование:
location ~* ^.+\.(jpg|jpeg|gif|png|css|js|bmp|txt)$ {
access_log off;
expires 14d; # кеширование в браузере на 14 дней
break;
}
Первое, что следует выяснить - какие именно заголовки ответа передаются с веб-сервера. Это можно сделать во вкладке Network в консоли разработчика Хрома или Сеть в Firefox. Далее фильтруем по маске .css или .js и обращаем внимание на заголовки:
Expires (недостаток - на клиенте может стоять неверное время) иCache-Control (лишен этого недостатка).В инструментах разработчика Хрома, в столбце Size надписи from disk cache и from memory cache как раз указывают на загрузку ресурса из кеша. А опция Disable cache полностью отключает кеш, ресурсы всегда загружаются с сервера, но только пока открыты инструменты разработчика.
Через curl:
curl -I "http://site.ru/js/scrips.js"
Чтобы кеширования не было, должно стоять:
Cache-Control: no-cache, no-store, must-revalidate
или
Cache-Control: max-age=0
или Expires указывает на дату в прошлом (минус 1 год, например).
Чтобы понять, участвует ли Apache в формировании ответа сервера, можно поставить дополнительный заголовок, через тот же .htaccess:
# Ставим заголовок для понимания
Header set BackServer "Apache"
Если настроить веб-сервер невозможно (как в заданном вопросе), для файла следует указать дату его модификации в виде GET-параметра, например, так:
<script src="/js/scrips.js?<?=date('ymdHis',
filemtime($_SERVER['DOCUMENT_ROOT'] . '/js/scrips.js'))?>"></script>
Кеширование в этом случае работать также будет, но при изменении файла GET-параметр изменится, что заставит браузер загрузить новую версию.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости