Caching de contenido estático (falso) que en realidad es dinámico en GAE para Python
En mi aplicación GAE tengo el siguiente controlador en app.yaml:
- url: /lang/strings.js
script: js_lang.py
Entonces, una llamada a/lang/strings.js
en realidad se asignará al controlador de solicitud js_lang.py que completa la respuesta comoapplication/javascript
. Quiero que esta respuesta se almacene en caché en el navegador para que solo se llame al controlador de solicitudes de vez en cuando (por ejemplo, cuando "invalido" el caché importando/lang/strings.js?v=xxxx
cuando implemente una nueva versión de la aplicación.
Para contenido estático normal, existe ladefault_expiration
element, que es muy útil. Y da como resultado encabezados de respuesta http como este:
Expires: Fri, 01 Apr 2011 09:54:56 GMT
Cache-Control: public, max-age=600
Ok, la pregunta: ¿hay alguna manera fácil de devolver encabezados como este, sin tener que configurarlos explícitamente? Alternativamente, ¿hay un fragmento de código que acepte algunos parámetros básicos como "días" y produzca los encabezados http esperados?
Editar 12 abril 2011
Solucioné esto simplemente configurando los dos encabezadosExpires
yCache-Control
Me gusta esto
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