缓存(假)静态内容,这对于Python的GAE实际上是动态的

Jon*_*der 10 python google-app-engine

在我的GAE应用程序中,我在app.yaml中有以下处理程序:

- url: /lang/strings.js
  script: js_lang.py
Run Code Online (Sandbox Code Playgroud)

因此,调用/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
Run Code Online (Sandbox Code Playgroud)

好的,问题是:我是否有一种简单的方法可以返回这样的标题,而无需明确设置它们?或者,是否有一个代码片段接受一些基本参数,如"天",并产生预期的http标头?

编辑2011年4月12日

我只需设置两个标题就可以解决这个问题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
Run Code Online (Sandbox Code Playgroud)

sys*_*out 6

看看尼克的静态服务博客文章.

您需要了解有关条件请求以及如何正确获取和设置正确的HTTP标头的所有信息:

  • Http Request头处理(If-Modified-Since,If-None-Match)
  • Http响应头处理(Last-Modified,ETag)