Кэширование (фальшивого) статического контента, который на самом деле динамический на GAE для Python - PullRequest
10 голосов
/ 01 апреля 2011

В моем приложении GAE у меня есть следующий обработчик в app.yaml:

- url: /lang/strings.js
  script: js_lang.py

Так что вызов /lang/strings.js будет фактически отображаться в обработчик запросов js_lang.py, который заполняет ответ как application/javascript.Я хочу, чтобы этот ответ кэшировался в браузере, чтобы обработчик запросов вызывался только время от времени (например, когда я «аннулирую» кэш, импортируя /lang/strings.js?v=xxxx при развертывании новой версии приложения.

Для нормального статического содержимого есть элемент default_expiration, который очень удобен и приводит к заголовкам HTTP-ответов, например:

Expires: Fri, 01 Apr 2011 09:54:56 GMT
Cache-Control: public, max-age=600

Хорошо, вопрос: есть ли простой способ длямне вернуть заголовки, такие как этот, без необходимости явно их устанавливать? В качестве альтернативы, есть ли фрагмент кода, который принимает несколько основных параметров, таких как "days", и производит ожидаемые http-заголовки?

Редактировать 12 апреля 2011

Я решил это очень просто, установив два заголовка Expires и Cache-Control следующим образом:

import datetime
thirty_days_in_seconds = 4320000
expires_date = datetime.datetime.now() + datetime.timedelta(days=30)
HTTP_HEADER_FORMAT = "%a, %d %b %Y %H:%M:00 GMT"        

self.response.headers["Expires"] = expires_date.strftime(HTTP_HEADER_FORMAT)
self.response.headers["Cache-Control"] = "public, max-age=%s" % thirty_days_in_seconds

1 Ответ

6 голосов
/ 01 апреля 2011

Посмотрите на Статическое обслуживание сообщение в блоге Ник .

Здесь есть все, что вам нужно знать о Условном запросе и о том, как правильно получить и установить правильные заголовки HTTP:

  • Обработка заголовка запроса HTTP (If-Modified-Since, If-None-Match)
  • Обработка заголовков ответа Http (Last-Modified, ETag)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...