В моем приложении 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
Хорошо, вопрос: есть ли простой способ для меня возвращать такие заголовки, как это, без необходимости их явно устанавливать? Кроме того, есть ли фрагмент кода, который принимает несколько базовых параметров, таких как "дни" и генерирует ожидаемые 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