Головная боль от бессонницы при простом кэше javascript, в то время как заголовки If-Modified-Since находятся на месте! - PullRequest
1 голос
/ 14 февраля 2011

Привет земляне!В течение некоторого времени я фантазирую о возможных решениях, но у меня нет подсказок для этой странной проблемы.Позвольте мне описать причину, а затем проблему:

Чтобы объединить файлы javascripts для уменьшения http-запроса, я поместил их в php, простое, но не радующее решение, которое будет кэшировать в течение полугода,(Будет ли жизнь намного приятнее, если так будет работать больше вещей?) Решение о пожаре и забывчивости.Вот я и подумал ...

Сайт работает нормально и все, кроме того, что при просмотре заголовков в phs-сгенерированном js-файле кажется, что появился этот showtopper:

An If-Modified-Since conditional request returned the full content unchanged.

Что здесь не так в сгенерированном php файле .js?Будем благодарны за любые наводящие ответы!

ниже файла <<strong> allcombined.js >

<?php
header("Content-type: text/javascript; charset=UTF-8");
header("Expires: " . gmdate ("D, d M Y H:i:s", time() + 2419200) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time() - 604800) . " GMT");

ob_start("compress");

include('script1.js');
include('script2.js');
include('script3.js');

ob_end_flush(); 
?>

1 Ответ

2 голосов
/ 14 февраля 2011

Чтобы обработать заголовки «If-Modified-Since», вам нужно проанализировать этот заголовок и сравнить его с вашей последней датой изменения.Это не будет сделано автоматически, если у вас нет веб-кэша, такого как Varnish, перед вашим веб-сервером.В PHP, если дата удовлетворительная, не выводите тело, вместо этого возвращайте ответ 304 Not Modified. Вот хороший пример того, как это делается. [php.net]

Причина, по которой вы получаете больше запросов на ваш актив, чем вы ожидаете, заключается в том, что вы не установили Cache-Контрольные или Pragma заголовки.Возможно, вы захотите сделать:

header("Cache-Control: public, max-age=2419200");
header("Pragma: public");

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

...