下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第SpringMVC中的httpCaching的具體使用SpringETagfilter
Cache是HTTP協(xié)議中的一個非常重要的功能,使用Cache可以大大提高應(yīng)用程序的性能,減少數(shù)據(jù)的網(wǎng)絡(luò)傳輸。
通常來說我們會對靜態(tài)資源比如:圖片,CSS,JS文件等做緩存。同樣的我們可以使用HTTPCache配合SpringMVC來做動態(tài)資源的緩存。
那么什么時候使用動態(tài)資源的緩存呢?
只有當這個資源不經(jīng)常更新或者你確切的知道該資源什么時候更新的時候就可以使用HTTPCache了。
HTTPCache是通過請求頭來實現(xiàn)的,主要有三種方式:過期時間,最后更新時間和Etag。
其中過期時間是客戶端驗證,最后更新時間和Etag是服務(wù)器端驗證。
過期時間
過期時間又有兩種方式,分別是Cache-Control和Expires頭。
在Cache-Control中,我們可以設(shè)置它的maxAge,超出該時間后,該資源才會被再次請求。如下所示:
@GetMapping("/{id}")
ResponseEntityProductgetProduct(@PathVariablelongid){
//…
CacheControlcacheControl=CacheControl.maxAge(30,TimeUnit.MINUTES);
returnResponseEntity.ok()
.cacheControl(cacheControl)
.body(product);
}
我們也可以在Head中設(shè)置Expires屬性。Expires的時間需要是標準時間格式,如下:
Sun,06Nov199408:49:37GMT;RFC822,updatedbyRFC1123
Sunday,06-Nov-9408:49:37GMT;RFC850,obsoletedbyRFC1036
SunNov608:49:371994;ANSIC'sasctime()format
如果要在java中使用,參考如下的例子:
@GetMapping("/forecast")
ResponseEntityForecastgetTodaysForecast(){
//...
ZonedDateTimeexpiresDate=ZonedDateTime.now().with(LocalTime.MAX);
Stringexpires=expiresDate.format(DateTimeFormatter.RFC_1123_DATE_TIME);
returnResponseEntity.ok()
.header(HttpHeaders.EXPIRES,expires)
.body(weatherForecast);
}
如果Cache-Control和Expires同時出現(xiàn),則會優(yōu)先使用Cache-Control。
Last-Modified
它的驗證邏輯是這樣的,客戶端會根據(jù)上次請求得到的Last-Modified設(shè)置它的If-Modified-Since,服務(wù)器端接收到了這個屬性之后可以跟之前的進行比較,如果相同則可以返回一個空的body。如下所示:
@GetMapping("/{id}")
ResponseEntityProductgetProduct(@PathVariablelongid,WebRequestrequest){
Productproduct=repository.find(id);
longmodificationDate=product.getModificationDate()
.toInstant().toEpochMilli();
if(request.checkNotModified(modificationDate)){
returnnull;
returnResponseEntity.ok()
.lastModified(modificationDate)
.body(product);
}
ETag
Last-Modified的時間只能精確到秒,如果還需要更細粒度的話,就需要用到ETag了。
ETag可以看成當前時刻某個資源的唯一標記,你可以取該資源的hash值作為ETag。
下面是它的一種實現(xiàn):
@GetMapping("/{id}")
ResponseEntityProductgetProduct(@PathVariablelongid,WebRequestrequest){
Productproduct=repository.find(id);
StringmodificationDate=product.getModificationDate().toString();
StringeTag=DigestUtils.md5DigestAsHex(modificationDate.getBytes());
if(request.checkNotModified(eTag)){
returnnull;
returnResponseEntity.ok()
.eTag(eTag)
.body(product);
}
SpringETagfilter
Spring提供了一個ShallowEtagHeaderFilter來根據(jù)返回的內(nèi)容自動為你生成Etag。
@Bean
publicFilterRegistrationBeanfilterRegistrationBean(){
ShallowEtagHeaderFiltereTagFilter=newShallowEtagHeaderFilter();
FilterRegistrationBeanregistration=newFilterReg
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 監(jiān)護室護理人員培訓(xùn)制度
- 涉農(nóng)場景培訓(xùn)制度
- 跆拳道培訓(xùn)基地管理制度
- 社會指導(dǎo)員培訓(xùn)管理制度
- 農(nóng)技人員培訓(xùn)班管理制度
- 江蘇花境培訓(xùn)制度
- 學(xué)校督導(dǎo)培訓(xùn)制度
- 火工品安全培訓(xùn)制度
- 進修醫(yī)師崗前培訓(xùn)制度
- 培訓(xùn)后期服務(wù)制度
- YY/T 1778.1-2021醫(yī)療應(yīng)用中呼吸氣體通路生物相容性評價第1部分:風(fēng)險管理過程中的評價與試驗
- GB/T 17213.4-2015工業(yè)過程控制閥第4部分:檢驗和例行試驗
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計量檢定機構(gòu)考核規(guī)范(培訓(xùn)講稿)
- GB∕T 5900.2-2022 機床 主軸端部與卡盤連接尺寸 第2部分:凸輪鎖緊型
- 2011-2015廣汽豐田凱美瑞維修手冊wdl
- DFMEA編制作業(yè)指導(dǎo)書新版
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
- 閥門基礎(chǔ)知識上
- 第二章注射成型工藝與模具結(jié)構(gòu)
評論
0/150
提交評論