Я пытаюсь настроить кэширование с Cache-Control
для конечной точки REST в моем веб-приложении, оно работает локально, но при развертывании на нашем производственном сервере браузер просто не будет кэшировать ответы.
Конечная точка запрашивается с помощью параметризованного запроса AJAX (как показано ниже).
Некоторые соответствующие примечания:
Я использую параметр кэш-буфер (_
) это метка времени Unix, сгенерированная при загрузке страницы.Он не изменяется в зависимости от запросов AJAX.
localhost на HTTP, а производство на HTTPS.Сертификат действителен, и связанных с ним ошибок нет.
Такое поведение наблюдается и в Firefox 59.0.2, и в Chrome 66.0.3359.139, поэтому я предполагаю, что это что-то в конфигурации.
Localhost
Request URL: http://localhost:8080/webapp/rest/events?_=1525720266960&start=2018-04-29&end=2018-06-10
Request Method: GET
Status Code: 200 OK
Referrer Policy: no-referrer-when-downgrade
=== Request ===
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: JSESSIONID=<token>
Host: localhost:8080
Referer: http://localhost:8080/webapp/
X-Requested-With: XMLHttpRequest
=== Response ===
Cache-Control: no-transform, max-age=300, private
Connection: keep-alive
Content-Length: 5935
Content-Type: application/json
Следующие запросы (для тех же параметров) эффективно загружаются из кэша, с той лишь разницей: Status Code: 200 OK (from disk cache)
Что выглядит нормально, так как я не хочу переоценивать.Ресурс следует извлекать снова, без проверки, только после того, как он устарел по истечении max-age
, указанного Cache-Control
.
Production
Request URL: https://www.example.org/webapp/rest/events?_=1525720216575&start=2018-04-29&end=2018-06-10
Request Method: GET
Status Code: 200 OK
Referrer Policy: no-referrer-when-downgrade
=== Request ===
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: JSESSIONID=<token>
Host: www.example.org
Referer: https://www.example.org/webapp/
X-Requested-With: XMLHttpRequest
=== Response ===
Cache-Control: no-transform, max-age=300, private
Connection: close
Content-Length: 5935
Content-Type: application/json
В этомВ этом случае ответ никогда не загружается из кэша.
Я удалил некоторые заголовки, которые я считаю излишними (Server
, X-Powered-By
, User-Agent
, Date
).
Вопрос
Что мешает кэшировать ответы браузером при обращении к производственному серверу?