2011-04-01 69 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