В моем приложении 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