Ответ 1
Нужно ли мне изменять этот макс-возраст = 0, чтобы выполнить лак лучше?
Да. Вам нужно сделать это, если вы хотите, чтобы он вообще выполнялся.
Если да, то где бы я это сделал?
Кажется, у вас все в порядке для кэширования статического контента, но вам также кажется, что нужно кэшировать ответы на выполнение PHP script:
Вам просто не хватает session_cache_limiter и session_cache_expire, который должен быть первым строком, выполненным на запрошенном PHP script, даже до session_start()
.
Если, например, возвращенный контент является закрытым, и вы хотите обновлять его каждую минуту, попробуйте что-то вроде:
session_cache_limiter('private');
session_cache_expire(1);
После этого вы должны увидеть правильное значение Cache-Control: max-age=60, private
для ответов на лак для запросов на сгенерированный PHP контент, включая те строки в начале script.
[обновление] Увидев, что ваша проблема еще не решена, возможно, вам стоит попробовать использовать Apache mod_expires вместо ручной настройки заголовка Cache-Control: http://httpd.apache.org/docs/2.4/mod/mod_expires.html
Это должно ответить на ваши вопросы, но позвольте мне дать вам несколько дополнительных заметок, которые могут вам пригодиться, и помочь вам лучше понять, как заголовок и заголовок Cache-Control
относятся друг к другу:
- При конфигурации по умолчанию
max-age=0
в ответе указывается как для лака, так и для браузера, что ответ не кэшируемый. Если в запросе клиента не задано иное или явно разрешено, Larn не будет показывать устаревший контент:
Элемент устаревшего кеша не будет возвращен никаким кешем (кэш-прокси или клиентский кеш).
От https://tools.ietf.org/html/rfc7234#section-5.3:
Если ответ включает в себя поле Cache-Control с max-age (раздел 5.2.2.8), получатель ДОЛЖЕН игнорировать Expires
поле. Аналогично, если ответ включает директиву s-maxage
(Раздел 5.2.2.9), общий получатель кэша ДОЛЖЕН игнорировать Expires
поле. В обоих случаях значение в Expires предназначено только для целей для получателей, которые еще не реализовали поле Cache-Control.
От http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3:
Если кеш возвращает устаревший ответ, либо из-за макс-устаревания директивы по запросу или из-за того, что кеш настроен на переопределение время истечения ответа, кэш ДОЛЖЕН присоединяться к предупреждению заголовок к устаревшему отклику, используя Предупреждение 110 (Ответ прост).
Кэш МОЖЕТ быть сконфигурирован для возврата устаревших ответов без валидация, но только если это не противоречит какому-либо "ДОЛЖНО" -уровню требования, касающиеся валидации кэш-памяти (например, "обязательная переоценка" ) директива кэширования).
Если и новый запрос, и кэшированная запись включают "максимальный возраст", директивы, то меньшее из двух значений используется для определения свежесть кэшированной записи для этого запроса.
-
Основной целью лака является сохранение кэшируемых ответов в памяти (пока они свежие), поэтому они могут быть отправлены в один и тот же OR клиенты, не регенерирующие их, также облегчая балансировку нагрузки если требуется.
-
Лак не будет служить устаревшим контентом при запросе нового содержимого (наиболее распространенный сценарий), и даже если бы это было сделано, браузер не будет сохранить его и будет генерировать новый запрос для новой страницы каждый время, когда пользователь запрашивал этот контент, излишне ударяя кеш (при всей сетевой активности) вместо того, чтобы локально сохраненная копия, которая была бы весьма неэффективной и заметно медленнее!
max-age Указывает, что клиент готов принять ответ возраст которого не превышает указанного времени в секундах. Если не также включена максимальная директива, клиент не желает принять застойный ответ.
- Если что-то еще не ясно, вы можете проверить лак документацию по Cache-Control для получения более подробной информации.
Теперь, если вы все еще видите, что браузер отправляет новый запрос каждый раз при загрузке содержимого (проверьте вкладку сети инструментов разработчика браузера или лаковые журналы), перепроверьте все. В качестве последнего средства вы также можете установить правильные метатеги html, хотя html5 осуждает их, и они не должны быть необходимы для любого современного браузера, и это не лучшая практика, поэтому я бы посоветовал это сделать.
Также здесь некоторое хорошее чтение о правильном управлении кешем контента, сгенерированного PHP-скриптами, которые могут вас заинтересовать.