Я много играл с этим и обнаружил, что это, вероятно, вызвано ошибкой Apache . Это не проблема браузера - когда временная диаграмма находится в строке запроса, браузер не понимает строку запроса и должен по крайней мере спросить сервер, не изменилась ли она. Apache хорошо отвечает «304 Не изменено», но он всегда отправляет файл тоже!
Я провел много экспериментов, и единственное решение, которое работало, было поместить метку времени непосредственно в имя файла . В PHP я использую следующую функцию:
function safe_inline_url($file)
{
$basename = basename($file);
if (strstr($basename, '.'))
return dirname($file) . "/" .
preg_replace('/(\.[^\.]*)$/', '_ts_' . filemtime($file) . '\1',
$basename);
else
return $file . '_ts_' . filemtime($file);
}
, который изменяет любой встроенный URL (css, js, images, ...) так, чтобы он добавлял метку времени, например. как js / forms.js => js / forms_ts_1278080148.js .
На сервере вы должны затем переписать измененные имена файлов обратно в настоящие имена, что достигается путем помещения этого в ваш файл .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)_ts_[0-9]{9,}$
RewriteRule ^ %1 [PT]
RewriteCond %{REQUEST_URI} ^(.*)_ts_[0-9]{9,}\.(.*)$
RewriteRule ^ %1.%2 [PT]
вы помещаете его в корневой каталог, и вы также должны поместить его в .htaccess каждого подкаталога при включенном RewriteEngine .
Единственная проблема была с библиотекой JavaScript, которая использует URL для включения других источников - вы не можете использовать этот трюк для включения их js-файлов.