Кто-нибудь знает, происходит ли что-то странное? Кажется, что моя установка обратного прокси не сохраняет правильные заголовки кеширования от исходного виртуального хоста.
Позволь мне объяснить...
В настоящее время я использую PHP Slim для создания API для своего веб-приложения. У него есть собственные механизмы кэширования, которые настроены и работают нормально. Итак, при посещении ресурса api.example.com/info
например, у меня есть Последнее изменение который установлен, что позволяет его кэшировать (он не меняется очень часто).
Таким образом, заголовки выглядят примерно так:
Request URL:http://api.example.com/info
Request Method:GET
Status Code:304 Not Modified
Заголовки запроса
Accept:text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:api.example.com
If-Modified-Since:Mon, 04 Oct 2010 08:00:52 1100
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
Заголовки ответа
Connection:Keep-Alive
Date:Tue, 19 Jun 2012 22:34:45 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.21 (Win64) PHP/5.3.8
Vary:Accept-Encoding
Это показывает, что ресурс возвращается с 304 - он был получен из кеша. Большой!
Однако веб-приложение обращается к нему через обратный прокси-сервер (кросс-доменные проблемы). При доступе к тому же самому ресурсу, на этот раз из app.example.com/api/info
, он возвращается с кодом 200. Он также заметно медленнее загружается, что заставляет меня думать, что что-то не работает.
На этот раз заголовки
Request URL:http://app.example.com/api/info
Request Method:GET
Status Code:200 OK
Заголовки запроса
Accept:text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:app.example.com
If-Modified-Since:Mon, 04 Oct 2010 08:00:52 GMT
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
Заголовки ответа
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1959
Content-Type:application/json
Date:Tue, 19 Jun 2012 22:41:01 GMT
Keep-Alive:timeout=5, max=100
Last-Modified:Mon, 04 Oct 2010 08:00:52 GMT
Server:Apache/2.2.21 (Win64) PHP/5.3.8
Vary:Accept-Encoding
X-API-Version:v1.0
X-Powered-By:PHP/5.3.8, Slim
Любые идеи? Извините за массу информации в заголовке выше - не хотел упускать какую-либо информацию.
Когда я сравниваю оба ваших примера запроса, я вижу еще несколько различий между ними.
например второй ответ (через прокси) включает
Content-Encoding:gzip
Линия. Возможно, ваш обратный прокси-сервер добавляет фильтр сжатия gzip перед выдачей результатов. Что может означать: ваш основной ресурс не изменился, но прокси-сервер изменяет содержимое, сжимая его, и поэтому он помечает это как «новое содержимое».
Другое отличие заключается в вашем запросе: в вашем первом запросе вы отправляете:
If-Modified-Since:Mon, 04 Oct 2010 08:00:52 +1100
но в вашем втором запросе timeoffset +1100
отсутствует, поэтому вы отправляете другое время модификации.