Назад | Перейти на главную страницу

Установлено время истечения срока действия: «По-прежнему отображается строка запроса, но нет явного срока действия»

У меня есть один локальный экземпляр Apache, работающий с включенным mod_cache (+ disk & mem), и, похоже, он отлично кэширует содержимое с моего сервера приложений. Мой сервер приложений устанавливает заголовки срока действия и Последнее изменение. Тем не менее, при развертывании на производственном сервере с теми же включенными модулями я получаю следующую ошибку в моих журналах: blablabla not cached. Причина: присутствует строка запроса, но нет явного срока действия. Раздел из отчет об ошибках выводится при вызове службы добавляется в конце этого сообщения

Есть какие-нибудь подсказки, почему Apache не кэширует контент? Единственное отличие, которое я могу сказать, - это версия Apache. Локально я использую 2.2.22, в производстве - 2.2.11.

Это из моей конфигурации

ServerName my-front-end.server.com
CacheEnable mem /
<Location "/rest-api/myservice" >
            ProxyPass           http://my-backend.appserver.com:8180/rest-api/myservice
            ProxyPassReverse    http://my-backend.appserver.com:8180/rest-api/myservice
</Location>

Это пример вывода

< HTTP/1.1 200 OK
< Date: Mon, 19 Nov 2012 16:09:13 GMT
< Server: Sun GlassFish Enterprise Server v2.1.1
< X-Powered-By: Servlet/2.5
< Expires: Tue Nov 20 05:00:00 CET 2012
< Last-Modified: Mon Nov 19 17:09:13 CET 2012
< Cache-Control: no-transform
< Content-Type: application/x-javascript
< Transfer-Encoding: chunked

Это из моего журнала apache (измененные имена серверов и uri приложения):

[Tue Nov 20 09:58:29 2012] [debug] proxy_util.c(1968): proxy: initialized single connection worker 47 in child 9879 for (my-backend.appserver.com)
[Tue Nov 20 09:58:29 2012] [debug] proxy_util.c(1855): proxy: grabbed scoreboard slot 48 in child 9879 for worker http://my-backend.appserver.com:8080/rest
[Tue Nov 20 09:58:29 2012] [debug] proxy_util.c(1874): proxy: worker http://my-backend.appserver.com:8080/rest already initialized
[Tue Nov 20 09:58:29 2012] [debug] proxy_util.c(1968): proxy: initialized single connection worker 48 in child 9879 for (my-backend.appserver.com)
[Tue Nov 20 09:58:34 2012] [info] Initial (No.1) HTTPS request received for child 5 (server my-front-end.server.com:80)
[Tue Nov 20 09:58:34 2012] [debug] mod_cache.c(131): Adding CACHE_SAVE filter for rest-api/myservice
[Tue Nov 20 09:58:34 2012] [debug] mod_cache.c(138): Adding CACHE_REMOVE_URL filter for rest-api/myservice
[Tue Nov 20 09:58:34 2012] [debug] mod_proxy_http.c(56): proxy: HTTP: canonicalising URL //my-backend.appserver.com:8180:rest-api/myservice
[Tue Nov 20 09:58:34 2012] [debug] proxy_util.c(1489): [client 172.16.9.92] proxy: http: found worker http://my-backend.appserver.com:8180/cfp/6 for http://my-backend.appserver.com:8180:rest-api/myservice?_jsonp=unique_4_&myParam=2
[Tue Nov 20 09:58:34 2012] [debug] mod_proxy.c(988): Running scheme http handler (attempt 0)
[Tue Nov 20 09:58:34 2012] [debug] mod_proxy_http.c(1924): proxy: HTTP: serving URL http://my-backend.appserver.com:8180:rest-api/myservice?_jsonp=unique_4_&myParam=2
[Tue Nov 20 09:58:34 2012] [debug] proxy_util.c(2045): proxy: HTTP: has acquired connection for (my-backend.appserver.com)
[Tue Nov 20 09:58:34 2012] [debug] proxy_util.c(2103): proxy: connecting http://my-backend.appserver.com:8180:rest-api/myservice?_jsonp=unique_4_&myParam=2 to my-backend.appserver.com:8180
[Tue Nov 20 09:58:34 2012] [debug] proxy_util.c(2201): proxy: connected rest-api/myservice?_jsonp=unique_4_&myParam=2 to my-backend.appserver.com:8180
[Tue Nov 20 09:58:34 2012] [debug] proxy_util.c(2356): proxy: HTTP: fam 2 socket created to connect to my-backend.appserver.com
[Tue Nov 20 09:58:34 2012] [debug] proxy_util.c(2468): proxy: HTTP: connection complete to 183.14.15.233:8180 (my-backend.appserver.com)
[Tue Nov 20 09:58:34 2012] [debug] mod_proxy_http.c(1701): proxy: start body send
[Tue Nov 20 09:58:34 2012] [debug] mod_cache.c(528): cache: rest-api/myservice?_jsonp=unique_4_&myParam=2 not cached. Reason: Query string present but no explicit expiration time
[Tue Nov 20 09:58:34 2012] [debug] mod_proxy_http.c(1790): proxy: end body send
[Tue Nov 20 09:58:34 2012] [debug] proxy_util.c(2063): proxy: HTTP: has released connection for (my-backend.appserver.com)

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

Из Журнал изменений для версии 2.2.x в Apache, раздел «Изменения в Apache 2.2.12»

  *) mod_cache: When an explicit Expires or Cache-Control header is set, cache
    normally non-cacheable response statuses. PR 46346.
    [Alex Polvi <alex polvi.net>]

Коммит можно найти Вот