2

サーブレットの応答をキャッシュしようとしていますが、どういうわけか機能していません (ページを更新するたびに Firebug から 200 OK が返されます)。これは、サーブレットに追加したコードです。

response.setContentType("application/javascript");
long now = System.currentTimeMillis();
response.setCharacterEncoding("UTF-8");
response.setDateHeader("Last-Modified", 0);
response.addHeader("Cache-Control", "max-age=5184000");
response.setDateHeader("Expires", now + 5184000 * 1000);
response.addHeader("Vary", "Host");

私も と 、今試しましsetHeaderLast-Modified

何も機能していないようです。何か案は?

ありがとう

これは、firebug が応答/要求ヘッダーを表示する方法です (リソースがキャッシュから取得されるべきであるが、取得されていない場合):

 Response Headersview source
 Cache-Control  max-age=5184000
 Connection Keep-Alive
 Content-Type   application/javascript;charset=UTF-8
 Date   Thu, 21 Mar 2013 09:53:48 GMT
 Expires    Sun, 31 Mar 2013 16:51:01 GMT
 Keep-Alive timeout=15, max=99



 Request Headersview source
 Accept */*
 Accept-Encoding    gzip, deflate
 Accept-Language    en-US,en;q=0.5
 Cache-Control  max-age=0
4

1 に答える 1

5

使用Last-Modifiedするには、サーブレットで協調コーディングが必要です。それをクライアントに送信すると、そのクライアントは、同じリソースを要求するときに、ヘッダーの可能なセットの 1 つを送り返します。

  • If-Modified-Since:
  • If-Unmodified-Since:

これらのヘッダーを処理し、特定の日付以降にコンテンツが変更されたかどうかを判断し、変更されていない場合は 304 応答を送信する必要があります。手作業が多い。また、Last-Modified日付は有効でなければならないことに注意してください(例: Tue, 15 Nov 1994 12:45:26 GMT)。

最も簡単な方法は、今のところ無視Last-Modifiedして、代わりにCache-ControlおよびExpiresヘッダーを使用することです。ヘッダーExpiresについて説明したように、ヘッダーは有効な日付形式である必要がありますLast-Modified

一般的なキャッシングについて詳しくは、この優れたドキュメントを参照してください。

于 2013-03-21T10:07:51.880 に答える