2013-02-23 50 views
4

在YouTube上已經有了這個新視頻,展示了GAE架構中EdgeCaching的優勢,並且在視頻的這個特定點,他們演示瞭如何輕鬆利用: http://www.youtube.com/watch?v=QJp6hmASstQ#t=11m12GAE:使用webapp2啓用邊緣緩存(Python)

可惜這不是那麼容易......

我正在尋找使用谷歌提供的webapp2的框架,使邊緣緩存。

我打電話:

self.response.pragma = 'Public' 
self.response.cache_expires(300) 

但似乎別的東西覆蓋。

我得到的標題是:

HTTP/1.1 200 OK 
Pragma: Public 
Cache-Control: max-age=300, no-cache 
Expires: Sat, 23 Feb 2013 19:15:11 GMT 
Content-Type: application/json; charset=utf-8 
Content-Encoding: gzip 
X-AppEngine-Estimated-CPM-US-Dollars: $0.000085 
X-AppEngine-Resource-Usage: ms=39 cpu_ms=64 
Date: Sat, 23 Feb 2013 19:10:11 GMT 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache, must-revalidate 
Vary: Accept-Encoding 
Server: Google Frontend 
Content-Length: 600 

我使用NDB頂層:

app = ndb.toplevel(webapp2.WSGIApplication(... 

我試過工藝這裏解釋,但他們似乎並不適用於webapp2的: http://code.google.com/p/googleappengine/issues/detail?id=2258#c14

我也看了這個帖子太: https://groups.google.com/d/topic/webapp2/NmHXoZZSVvo/discussion

我試圖手動設置一切都沒有成功。有些東西正在壓倒我的緩存設置。

有沒有辦法使它與webapp2一起工作?歡迎任何其他選項。

編輯:我使用的版本前綴:http://version.appname.appspot.com的網址,這可能是我的問題的原因。

+0

「邊緣緩存僅適用於Google Apps域,對appspot.com無效」[請參閱此帖](https://groups.google.com/d/msg/google-appengine/8QgEUBOiNFw/ m4O5quSO8q0J) – Deleplace 2014-10-22 11:57:49

回答

6

這應該是所有你需要:

self.response.cache_control = 'public' 
self.response.cache_control.max_age = 300 
+0

它適用於dev_appserver,但在appengine上,它仍然不會緩存。這裏是頭部:'Cache-Control→max-age = 300,public,no-cache,必須重新驗證 Content-Encoding→gzip Content-Length→600 Content-Type→application/json; charset = utf-8 日期→2013年2月25日19:12:44 GMT 過期→週五,01 Jan 1990 00:00:00 GMT Pragma→no-cache 服務器→Google Frontend 不同→接受編碼 X-AppEngine-Estimated-CPM-US-Dollar→$ 0.000079 X-AppEngine-Resource-Usage→ms = 215 cpu_ms = 64' – sanx 2013-02-25 20:23:34

+0

我使用版本前綴:http://version.appname.appspot.com這似乎是它沒有踢的原因。 – sanx 2013-02-25 21:14:39

+1

你有沒有嘗試註銷你的管理員帳戶來測試它? – Dinoboff 2014-09-27 17:26:18

1

我猜你混淆了兩個相關但不同的想法。

您鏈接的視頻的第一個想法是安排您的應用中的某些文件由專門提供靜態內容的App Engine服務器池提供。這比讓您的應用程序提供這些文件更快,因爲啓動應用程序的新實例來提供靜態文件不會有任何延遲。 (強烈考慮以這種方式提供您的.js和.css。)通過您在app.yaml(或適用於Java應用程序的appengine-web.xml)中的聲明,此靜態服務工具完全在應用程序更新(上載)時進行控制。

第二個想法是通過HTTP響應頭來安排您的應用發出的頁面可被應用引擎之外的緩存緩存。

如果您將文件聲明爲靜態文件,則您可以控制與文件一起提供的附加HTTP響應標頭。請參閱documentation on configuring static files

+0

該鏈接沒有指向視頻中的正確時間,我編輯了它。感謝您指出。 [視頻](http://www.youtube.com/watch?v=QJp6hmASstQ#t=11m12)我在看第二個想法,使用http響應頭。 – sanx 2013-02-25 20:29:53

2

檢查Caching Details瞭解更多信息,可能是你打破了一些規則。接下來最好的部分:

的響應可以存儲在雲CDN緩存只有在以下所有條件爲真:

  • 它是由與高速緩存的後臺服務啓用服務。
  • 這是對GET請求的迴應。
  • 狀態碼是200,203,300,301,302,307或410.
  • 它有一個Cache-Control:public指令。
  • 它有一個Cache-Control:s-maxage,Cache-Control:max-age或Expires 標題。
  • 它有一個Content-Length頭或一個Transfer-Encoding頭。

此外,還有一些檢查會阻止響應的緩存。如果滿足以下任一條件,則不會緩存響應:

  • 它具有Set-Cookie標頭。
  • 它的身體超過4 MB。
  • 它具有Vary標頭,其值不是Accept,Accept-Encoding或 - Origin。它有一個Cache-Control:no-store,no-cache或private指令。
  • 相應的請求有一個Cache-Control:no-store指令。