2011-04-01 67 views
10

实际动态在我的GAE应用程序我有app.yaml中的以下处理:缓存的(假的)静态内容是关于GAE的Python

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

所以要/lang/strings.js通话将实际映射到js_lang .py请求处理程序将响应填充为application/javascript。我希望将此响应缓存在浏览器中,以便请求处理程序仅在一段时间内被调用一次(例如,当我部署应用程序的新版本时,通过导入/lang/strings.js?v=xxxx使“缓存”无效)

For正常的静态内容,有default_expiration元素,这是非常方便的,并导致这样的HTTP响应头:

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

好了,这样的问题:是有我返回头像这样的一个简单的方法,而不必明确地设置它们呢?或者,是否有代码片段可以接受几个基本参数,如“days”并产生期望的http-header?

编辑2011年4月12日

我非常地解决了这个通过简单设置两个头ExpiresCache-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

相关:http://stackoverflow.com/questions/2426103/asking-browsers-to-cache-as-a ggressively尽可能 – balpha 2011-04-01 11:32:43

+0

谢谢balpha - 我可能会最终明确设置激进的缓存标题。但发布这个看看是否有人已经解决了这个问题,或者如果有一些yaml请求处理程序设置我忽略了。 – 2011-04-01 11:41:58

回答

6

有由Nick看看Static serving博客文章。

有你需要了解Conditional request以及如何正确获取和设置正确的HTTP标头的一切:

  • HTTP请求头处理 (If-Modified-SinceIf-None-Match
  • HTTP响应头处理 (Last-ModifiedETag
+0

谢谢。最有用的。 – 2011-04-02 14:06:56