4

YouTube には、GAE アーキテクチャにおける EdgeCaching の強みを示すこの新しいビデオがあり、ビデオのこの特定の時点で、活用がいかに簡単かを示しています: http://www.youtube.com/watch?v=QJp6hmASstQ #t=11m12

残念ながら、それは簡単ではありません...

Google が提供する 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の URL を使用しています。これがおそらく問題の原因です。

4

3 に答える 3

6

必要なのはこれだけです。

self.response.cache_control = 'public'
self.response.cache_control.max_age = 300
于 2013-02-24T12:38:47.293 に答える
3

詳細については、キャッシュの詳細を確認してください。いくつかのルールに違反している可能性があります。次に最良の部分:

次のすべてに該当する場合にのみ、レスポンスを Cloud 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 を超えています。
  • Accept、Accept-Encoding、または - Origin 以外の値を持つ Vary ヘッダーがあります。
  • Cache-Control: no-store、no-cache、または private ディレクティブがあります。
  • 対応するリクエストには、Cache-Control: no-store ディレクティブがありました。
于 2017-01-11T20:11:12.940 に答える
1

あなたは2つの関連しているが異なるアイデアを混同していると思います。

リンク先の動画で説明されている最初のアイデアは、静的コンテンツの提供に特化したAppEngineサーバーのプールによってアプリ内の特定のファイルを提供するように調整することです。これは、静的ファイルを提供するためにアプリの新しいインスタンスを起動するのに遅延がないため、アプリにこれらのファイルを提供させるよりも高速です。(この方法で.jsと.cssを提供することを強く検討してください。)この静的提供機能は、アプリの更新(アップロード)時に、app.yaml(またはappengine-web.xmlJavaアプリの)宣言を介して完全に制御されます。

2番目のアイデアは、HTTP応答ヘッダーを介して、アプリが出力するページをアプリエンジンの外部のキャッシュでキャッシュできるように配置することです。

ファイルを静的として宣言すると、ファイルとともに提供される追加のHTTP応答ヘッダーをある程度制御できます。静的ファイルの構成に関するドキュメントを参照してください。

于 2013-02-23T23:41:51.843 に答える