У меня один и тот же PHP-код на двух разных сайтах на двух разных страницах. Код просто отображает текущее время и устанавливает заголовок http-кеширования с использованием max-age равным 60 секундам. У меня есть CDN-сервер. Когда я запускаю страницы, я вижу, что CDN кэширует контент с сервера 1, но не с сервера 2. Я просмотрел записи заголовков в web-sniffer.net, и оба они показывают максимальный возраст как 60.
Заголовки http зависят от сервера. Поскольку оба сайта размещены на общих серверах, но у разных провайдеров, нужно ли мне смотреть на что-нибудь еще, кроме кода и .htaccess ??
Почему CDN кэширует только контент с одного сервера. Почему не соблюдается запись о максимальном возрасте с другого сервера?
Когда я пытаюсь просмотреть записи заголовка на самой странице, я вижу HTTP_CACHE_CONTROL = max-age = 0. Тогда почему web-sniffer.net и curl показывают max-age как 60. И какой из них правильный.
Код, который у меня есть на странице:
header('Cache-Control: max-age=60, public');
echo date("F j, Y - H:i:s");
echo "<hr />";
foreach($_SERVER as $h=>$v)
if(ereg('HTTP_(.+)',$h,$hp))
echo "<li>$h = $v</li>\n";
?>
PS: Я задал аналогичный вопрос о Stackoverflow, но не получил полезных ответов. Итак, я подумал о том, чтобы разместить это здесь. Вопрос в Stackoverflow находится по адресу: https://stackoverflow.com/questions/8022529/max-age-doesnt-work
Мне удалось исправить проблему с заголовком http с максимальным возрастом.
Сеть CDN не смогла принять HTTP-заголовок «max-age» из-за наличия в заголовке «Vary: Accept-Encoding». Судя по всему, заголовок Accept-Encoding был добавлен Apache автоматически. Похоже, что CDN не сможет кэшировать ответ, если существует заголовок Vary: Accept-Encoding.
Добавление SetEnv force-no-вар в .htaccess подавляет заголовок Vary в ответ. Это устранило проблему, и теперь CDN учитывает HTTP-заголовок максимального возраста.
Для справки: http://blog.iosart.com/2004/05/26/fooling-apache/