2013-01-10 15 views
6

この質問は自明ではありませんが、Web googleアプリエンジンのJavaサーバーでブラウザのキャッシュを有効にすることはできませんでした。GAEでブラウザキャッシングを有効にする方法

私のappengine-web.xmlにこの種のものを配置しようとしました:

<static-files> 
    <include path="/**.cache.**" expiration="365d" /> 
... 

が、私はレスポンスヘッダを探しています私は地元でこれを見つける:

Content-Length: 196084 
Cache-Control: public, max-age=31536000 
Expires: Fri, 10 Jan 2014 19:40:45 GMT 
Content-Type: image/png 
Last-Modified: Tue, 18 Dec 2012 21:41:22 GMT 
Server: Jetty(6.1.x) 
本番環境で結構です...しかし、この

私が欲しいものを明確:(ない
HTTP/1.1 304 Not Modified 
ETag: "RV4Bpg" 
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000 
X-AppEngine-Resource-Usage: ms=109 cpu_ms=0 
Date: Thu, 10 Jan 2013 19:41:20 GMT 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache, must-revalidate 
Server: Google Frontend 

私が逃した何か? があります...

HTTP/1.1 200 OK 
ETag: "RV4Bpg" 
Date: Fri, 11 Jan 2013 12:50:50 GMT 
Expires: Sat, 11 Jan 2014 12:50:50 GMT 
Cache-Control: public, max-age=31536000 
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000 
X-AppEngine-Resource-Usage: ms=3 cpu_ms=0 
Date: Fri, 11 Jan 2013 12:50:50 GMT 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache, must-revalidate 
Content-Type: image/png 
Server: Google Frontend 
Content-Length: 196084 
Proxy-Connection: Keep-Alive 
Connection: Keep-Alive 
X-RBT-Optimized-By: eu-dcc-sh02 (RiOS 6.5.5b) SC 

アンのETagと、いくつかの矛盾した '有効期限' と 'のCache-Control':

まだダウンロードされていないコンテンツのための[EDIT] 、私のブラウザは、以下のヘッダを受け取りますキャッシュポリシーを設定するいくつかの方法?私のISPから来ることができますか?プロキシ?

+0

[キャッシュ関連のHTTPヘッダーは、App Engineのサーブレットレスポンスで上書きされます](http://stackoverflow.com/questions/14172758/cache-related-http-headers-are-overridden-in- servlet-response-on-app-engine) – icza

答えて

9

:あなたの質問に示す

  1. X-AppEngine-*ヘッダが含まれています。
  2. X-AppEngine-*ヘッダーはプライベートであり、キャッシュされていないため、Cache-Control: no-cache, must-revalidateヘッダーが含まれています。リソース使用量の統計と

    応答がキャッシュ不可能行われます:

これはと言うhttps://developers.google.com/appengine/docs/python/runtime#Responsesの応答セクションの終わりに隠されています。

+0

ハム、そうです。すべてのタンク。 – Kroc

+1

尋ねられた質問にも同様の問題がありました。GAE管理者としてログインしていなくても(たとえば、ゲストとしてChromeを使用したりログアウトしたりしても)、304を取得することができます。私の場合GAE管理者としてログインしていないChromeを使用し、開発ツールを開いて、 'キャッシュを無効にする(DevToolsが開いている間に)'をオフにしました。 Still 304。理由は、ヒットティン+ R(またはctrl + R)がブラウザでキャッシュを使用していないことがわかったからです。ブラウザのurlフィールドをクリックしてEnterキーを押すと、これらの304はすべて200(キャッシュ)になります。 – stianlp

2

返信は問題はブラウザがETagのを保存したことであるHTTP 304

あるのではい、Cache-Controlがオフになっている:同じURL /コンテンツのためのすべての要求のために今http://en.wikipedia.org/wiki/HTTP_ETag

、ブラウザはETagのとGAEを提供HTTP 304 Not Modifiedで返信します。

このURLでリソース(イメージ)を変更し、まだこのブラウザに読み込まれていない別のURLをチェックするか、別のブラウザまたはコンピュータを使用してみてください。

また、これが関連している:あなたは、管理者としてGoogleのApp EngineアプリケーションにログインしているWhat takes precedence: the ETag or Last-Modified HTTP header?

+0

このETag機能をハイライトしてくれてありがとう。 新しいコンテンツの場合、ブラウザはETagと有効期限を受け取ります。 (私は似たような状態ではないので、今はヘッダーを公開しません。プロキシなど) 私は質問を完了します。 – Kroc

関連する問題