Я работаю над веб-приложением на виртуальном глобусе, которое обслуживает множество фрагментов карты, и я пытаюсь настроить заголовки http, которые отправляет мой сервер, чтобы указать браузеру (Firefox) время истечения для кэширования этих фрагментов. Я делаю это через заголовок Cache-Control и параметр max-age.
После нескольких тестов я понял, что кэширование не работает для значений ниже 1799 секунд (примерно 30 минут). Сделав некоторую отладку с сетевой панелью firebug, я обнаружил, что десинхронизация между клиентом и сервером занимает 30 минут. Например, если сервер отправляет этот заголовок с указанием времени истечения 3600 секунд:
Date Fri, 14 Oct 2011 07:46:12 GMT
Server Apache/2.2.13 (Fedora)
X-Powered-By PHP/5.2.11
Connection close
Cache-Control max-age=3600
Content-Length 47864
Content-Type image/jpeg
И я просматриваю содержимое кэша для этого запроса, я получаю это.
Last Modified Fri Oct 14 2011 09:16:16 GMT+0100 (Hora de verano GMT)
Last Fetched Fri Oct 14 2011 09:16:16 GMT+0100 (Hora de verano GMT)
Expires Fri Oct 14 2011 09:46:11 GMT+0100 (Hora de verano GMT)
Обратите внимание, что время клиента составляет GMT + 1, а время сервера - GMT, поэтому реальный перекос составляет около 30 минут.
Итак, я пришел к выводу, что Firefox вычисляет время истечения из заголовка даты сервера, а не дату прибытия ответа на клиенте, это правильно? Если это так, то это большая проблема, потому что если я установлю срок действия в 1 час, пользователь в Китае никогда не будет кэшироваться, как я могу обойти это? Заранее спасибо.