GAE и кэширование ответов - PullRequest
       11

GAE и кэширование ответов

0 голосов
/ 10 октября 2010

Добрый день, Мне нужно, чтобы результаты моего сервлета всегда кэшировались браузером. Попытка поставить те же заголовки, как http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js, но результаты по-прежнему не приходят из кэша браузера (протестировано с FireBug).

Мой код:

 response.setContentType("text/javascript");
  response.setHeader("Last-Modified", "Mon, 15 Feb 2010 23:30:12 GMT");
  response.setHeader("Date", "Tue, 28 Sep 2010 19:45:24 GMT");
  response.setHeader("Expires", "Wed, 28 Sep 2021 19:45:24 GMT");
  response.setHeader("Vary", "Accept-Encoding");
  response.setHeader("X-Content-Type-Options", "nosniff");
  response.setHeader("Cache-Control", "public, max-age=31536000");
  response.setHeader("Age", "36");

Мои заголовки (firebug):

HTTP/1.1 200 OK
Content-Type: text/javascript; charset=UTF-8
Last-Modified: Mon, 15 Feb 2010 23:30:12 GMT
Date: Sun, 10 Oct 2010 14:40:49 GMT
Expires: Mon, 10 Oct 2011 14:40:49 GMT
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
Server: sffe
Content-Encoding: gzip
Cache-Control: public, max-age=31536000
Content-Length: 46401
Age: 2

Заголовки Googleapis:

HTTP/1.1 200 OK
Content-Type: text/javascript; charset=utf-8
Last-Modified: Mon, 15 Feb 2010 23:30:12 GMT
Expires: Wed, 28 Sep 2021 19:45:24 GMT
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
Cache-Control: public, max-age=31536000
Age: 36
Content-Encoding: gzip
Date: Sun, 10 Oct 2010 14:32:06 GMT
Server: Google Frontend
Content-Length: 36838

Все заголовки одинаковы, но с разным порядком (хотя код - не должен, по-видимому, GAE меняет порядок). В чем может быть проблема? Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 октября 2010

Заказ не имеет значения.У вас есть проблемы с этим?Теоретически, это может произойти, если контейнер сервлетов, используемый GAE, использует HashMap для хранения заголовков перед передачей ответа, а ваш локальный контейнер сервлетов LinkedHashMap или List<Pair>.

Что касается ответаДля кэширования необходим как минимум заголовок Expires в далеком будущем вместе с действительным заголовком ETag или Last-Modified.Cache-Control и Age не обязательны.

1 голос
/ 06 февраля 2012

используйте вместо этого addHeader.setHeader () перезаписывает ранее установленные значения

...