2013-01-05 4 views
6

画像を処理するサーブレットがApp Engineにあります。キャッシュ関連のHTTPヘッダーは、App EngineのServletレスポンスでオーバーライドされます。

サーブレットは、HTTPヘッダー値を正しく設定して、イメージをキャッシュする必要があることを示します。しかし、App Engineはこれらのヘッダーをオーバーライドし、画像がキャッシュされないようにします。

以前は同じコードが使用されていましたが、今では機能しません。

App EngineのドキュメントがCache-Control場合、ExpiresVaryヘッダは、サーブレットによって設定されている、彼らはそのまま残されると述べている: https://developers.google.com/appengine/docs/java/runtime#Responses

これは私のサンプルコードです:

response.setContentType("image/jpeg"); 
//response.setDateHeader("Expires", new Date().getTime() + 60L*24*60*60*1000); // 60 days cache time 
//response.addHeader("Cache-Control", "public, max-age=5184000"); // 5_184_000 sec = 60 days cache time 
response.addHeader("Cache-Control", "public, max-age=90000"); // 90_000 sec = 25 hours cache time 
response.getOutputStream().write(data); // Data is a byte array containing the JPEG image data 

(私は

HTTPリクエストレスポンスを調べると、レスポンスには次のheaが含まれていますders:あなたが見ることができるように

HTTP/1.1 200 OK 
status: 200 OK 
version: HTTP/1.1 
cache-control: public, max-age=90000 
cache-control: no-cache, must-revalidate 
content-length: 6777 
content-type: image/jpeg 
date: Sat, 05 Jan 2013 14:11:47 GMT 
expires: Fri, 01 Jan 1990 00:00:00 GMT 
pragma: no-cache 
server: Google Frontend 

、App Engineはキャッシュを無効にcache-controlexpirespragmaヘッダを挿入します。これは、リクエストにcookieヘッダーがあるためです。また、 https://developers.google.com/appengine/docs/java/runtime#Responses のドキュメントでは、この場合(Cookieが設定されていると)、キャッシングをプライベートに設定するので、ブラウザはキャッシュできますが、中間プロキシサーバーはキャッシュできません。 クッキーは私によっては追加されませんが、Googleアナリティクスのコード(私はページ上でGoogle Analyticsを有効にしました)。

私は間違っていますか?サーブレットの応答を適切にキャッシュするにはどうすればよいですか?

EDIT: 詳しい調査の結果、私はGoogleの認証を使用して、ユーザーが彼/彼女のGoogleアカウントを使ってログインしている場合は、ユーザーに関連するクッキーは当然のことながら、追加されるため、クッキーが要求に追加されていることを示しました。ユーザーがログインしていない場合、キャッシュは無効になりません。だから私のさらなる質問は:ユーザーがGoogleアカウントでログインしているときにサーブレットが提供する画像をキャッシュする方法はありますか?

編集:解決: Google App Engineは、アプリの管理者がクライアントの場合にのみキャッシュを無効にします。この場合、App Engineは自動的に、管理者専用のヘッダーを挿入します(たとえば、リクエストの見積もりコストなど)。これはプライベートな情報なので、キャッシングが無効になっていることは分かります。

+0

これは25時間です。 max-ageは秒を指定します。 90000sec = 1500min = 25時間 – NagyI

+0

@NagyIそう、それはタイプミスだった。 – icza

答えて

4

ドキュメントによると、ログインしているユーザーが管理者の場合のみ、ヘッダーを上書きする必要があります。これが事実であるかどうかチェックしましたか?

+0

はい、これはまさにそのケースです。私は数週間前にそれを発見しました。ポストを更新するのを忘れました。今それをやっている。 – icza

+0

以前に解決されていたとしても、あなたの答えを受け入れます。 – icza

+0

ありがとう、あなたはそれを修正することができてうれしい。 –

関連する問題