2016-11-06 2 views
1

У меня есть приложение, в котором с помощью PHP создается несколько статических файлов javascript, чтобы позволить параметрам конфигурации изменять статические файлы (путь: mystaticfile.js.php). Все работает отлично ИСКЛЮЧАЮ, что я не могу заставить настройки кэша работать, и эти ресурсы перезагружаются при каждой загрузке страницы.Заголовки кэша на PHP-файле не работают

Файл PHP использует следующие заголовки, чтобы попытаться установить параметры кэша:

$expires= 60 * 60 * 24 * 60; //cache for 60 days 
header('Pragma: public'); 
header('Cache-Control: max-age=' . $expires); 
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT'); 
header("content-type: application/x-javascript"); 

Однако, когда файлы обслуживаются они показывают заголовки, которые выглядят как:

HTTP/1.1 200 OK 
Date: Sun, 06 Nov 2016 19:18:00 GMT 
Server: Apache/2.2.15 (CentOS) 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 744 
Keep-Alive: timeout=15, max=95 
Connection: Keep-Alive 
Content-Type: application/x-javascript 

Моих первая мысль заключалась в том, что это могло быть связано с тем, что Apache имеет флаг ExpiresActive, но я не вижу никаких правил, установленных для файлов PHP.

Чтение онлайн звучит как ETag вопросов может быть проблема, но я добавил

Header unset Pragma 
FileETag None 
Header unset ETag 

в файл http.conf (и перезапустить службу) и до сих пор нет костей.

Любые мысли?

+0

как о том, чтобы их * .js браузер, скорее всего, кэш, что – nogad

+0

@nogad это не должно иметь никакого значения. Заголовки устанавливаются, и браузер распознает их как файлы JS. Проблема заключается в том, что браузер получает инструкции не кэшировать, несмотря на то, что заголовки заданы php –

+0

. Можете ли вы попытаться добавить некоторый случайный заголовок ('header ('Foo: bar');'), чтобы сначала убедиться, что ваши заголовки применяется? –

ответ

1

Источник: PHP: Worry about some magical added “Cache-Control” Header ?

Эти заголовки автоматически устанавливаются PHP Session module в предотвратить браузер/прокси кэширование ваших страниц. В зависимости от вашей установки среды, можно контролировать эти заголовки с помощью функции session_cache_limiter() или использовать php.ini

Чтобы отключить эти поведение просто передать пустую строку в функцию session_cache_limiter(), как указано в документации:

session_cache_limiter('');