[SpringWebサーブレットの公式文書を読み込む]1.Spring MVC (9) HTTP Caching
1.9 HTTP Caching
HTTPキャッシュは、Webアプリケーションのパフォーマンスを大幅に向上させることができます.HTTPキャッシュは、
Spring Web MVCで使用可能なHTTPキャッシュに関するオプションについて説明します.
1.9.1
WebContentInterceptor
WebContentGenerator
Controllers
Static Resources
RFC 7234は、
1.9.2 Contollers
コントローラは、HTTPキャッシュの明示的なサポートを追加できます.リソースの
次の例では、コントローラの条件要求ヘッダーも表示できます.
アプリケーション別の計算
応答304(NOT MODIFIED)-追加処理なしに設定される.
リクエストの処理を続行します.
1.9.3 Static Resources
最適なパフォーマンスを得るためには、
1.9.4
HTTPキャッシュは、Webアプリケーションのパフォーマンスを大幅に向上させることができます.HTTPキャッシュは、
Cache-Control
応答ヘッダおよび条件付き要求ヘッダ(例えば、Last-Modified
およびETag
)を中心とする.Cache-Control
は、個人(ブラウザなど)およびパブリック(エージェントなど)キャッシュが応答をキャッシュおよび再使用する方法を提案する.ETag
ヘッダは、コンテンツを変更せずに本文なしの条件要求(NOT MODIFED)を実行するために使用される.ETag
は、Last-Modified
ヘッダーのより詳細な継承者と見なすことができる.Spring Web MVCで使用可能なHTTPキャッシュに関するオプションについて説明します.
1.9.1
CacheControl
CacheControlは、Cache-Control
ヘッダーに関する設定構成をサポートし、複数の位置で引数を実行できます.WebContentInterceptor
WebContentGenerator
Controllers
Static Resources
Cache-Control
応答ヘッダのすべての可能な説明を説明するが、CacheControl
タイプは、使用例を中心とした方法を採用し、典型的なスキームに重点を置いている.// Cache for an hour - "Cache-Control: max-age=3600"
CacheControl ccCacheOneHour = CacheControl.maxAge(1, TimeUnit.HOURS);
// Prevent caching - "Cache-Control: no-store"
CacheControl ccNoStore = CacheControl.noStore();
// Cache for ten days in public and private caches,
// public caches should not transform the response
// "Cache-Control: max-age=864000, public, no-transform"
CacheControl ccCustom = CacheControl.maxAge(10, TimeUnit.DAYS).noTransform().cachePublic();
WebContentGenerator
はまた、より単純なcachePeriod
属性(秒単位で定義)を可能にする.-1
の値は、Cache-Control
応答ヘッダを生成しない.0
値'Cache-Control: no-store'
命令を使用してキャッシュを防止します.n > 0
の値は、'Cache-Control: max-age=n'
命令キャッシュn
秒の応答を使用する.コントローラは、HTTPキャッシュの明示的なサポートを追加できます.リソースの
lastModified
またはETag
の値は、条件要求ヘッダと比較する前に計算する必要があります.コントローラは、ResponseEntity
にETag
ヘッダおよびCache-Control
設定を追加することができ、以下の例に示す.@GetMapping("/book/{id}")
public ResponseEntity<Book> showBook(@PathVariable Long id) {
Book book = findBook(id);
String version = book.getVersion();
return ResponseEntity
.ok()
.cacheControl(CacheControl.maxAge(30, TimeUnit.DAYS))
.eTag(version) // lastModified is also available
.body(book);
}
条件要求タイトルと比較して、コンテンツが変更されていない場合、前の例では304(NOT MODIFIED)応答が送信され、本文は空である.そうでなければ、応答はETag
およびCache-Control
ヘッダを追加する.次の例では、コントローラの条件要求ヘッダーも表示できます.
@RequestMapping
public String myHandleMethod(WebRequest request, Model model) {
long eTag = ... // (1)
if (request.checkNotModified(eTag)) {
return null; // (2)
}
model.addAttribute(...); // (3)
return "myViewName";
}
アプリケーション別の計算
応答304(NOT MODIFIED)-追加処理なしに設定される.
リクエストの処理を続行します.
eTag
値、lastModified
値または両方について条件付き確認要求があり、3つの変換がある.条件付きGET
およびHEAD
要求に対して、応答は304(NOT MODIFIED)に設定され得る.条件付きのPOST
、PUT
、およびDELETE
については、同時修正を回避するために応答を412に設定することができる.1.9.3 Static Resources
最適なパフォーマンスを得るためには、
Cache-Control
および条件応答ヘッダの静的リソースが必要である.Static Resource構成セクションを参照してください.1.9.4
ETag
FilterShallowEtagHeaderFilter
を使用すると、応答で計算された「浅い」eTag
の値を追加することができ、CPU時間ではなく帯域幅を節約することができる.Shallow ETagを参照してください.Reference
この問題について([SpringWebサーブレットの公式文書を読み込む]1.Spring MVC (9) HTTP Caching), 我々は、より多くの情報をここで見つけました https://velog.io/@ybw903/스프링-Web-Servlet-공식문서-읽기1.-Spring-MVC-9-HTTP-Cachingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol