2017-05-21 3 views
0

私はファイルシステムからSpring @Controller経由でファイルを提供していますが、ブラウザキャッシュを最大限に活用したいと考えています。ここで変更するまでファイルを永久にキャッシュするためのHTTPヘッダー

はリクエストを処理する方法である:

@ResponseBody 
@GetMapping(value = "/file/{f:.*}") 
public FileSystemResource getFile(@PathVariable("f") String fileName, HttpServletResponse response) { 

    File file = new File("/folder/" + fileName); 

    response.setHeader("Cache-Control", CacheControl.maxAge(7, TimeUnit.DAYS).cachePrivate().getHeaderValue()); 
    response.setDateHeader("Last-Modified", file.lastModified()); 
    response.setHeader("ETag", "" + file.lastModified()); 

    return new FileSystemResource(file); 
} 

ブラウザはそれらが最後の要求以降のファイルシステムに変更された場合を除いて、永遠にファイルをキャッシュする必要があります。

設定方法がわかりませんCache-ControlExpiresです。

どのように設定するのですか、どのヘッダーを追加して目的の動作を得る必要がありますか?私も、デフォルトでは次のヘッダーが追加されSpring Securityを使用

注:

Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Expires:0 
Pragma:no-cache 

これらのヘッダは、「通常」ページの罰金ですが、私は/file/**を取り扱う上で示した方法のためにそれらをしたいいけません。

答えて

1

通常、ETagヘッダーが使用されます。 ETagの公式春のドキュメントから:

アンのETag(エンティティタグ) 指定されたURLのコンテンツの変化を決定するために使用さ HTTP/1.1準拠のWebサーバから返されたHTTPレスポンスヘッダです。

ETagで使用されるリクエストヘッダーは、"If-None-Match""If-Match"です。これらは、条件付きで要求を行うために使用されます。

編集:Spring Securityで動作させるには、これらのヘッダーの設定を無効にする必要があります。設定方法では、追加することができますhttpSecurity.headers().cacheControl().disable();

関連する問題