溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

透過ATS緩存配置看如何判斷HTTP資源是否可緩存方法論

發布時間:2020-07-23 19:03:09 來源:網絡 閱讀:4524 作者:愚人乙 欄目:網絡安全

      緩存有個大原則,就是在不影響用戶、不觸犯法律的前提下,盡量多的將資源緩存到本地。哪些HTTP資源可以cache哪些不能cache,ATS對可緩存性有一套系統的判斷機制,設置靈活,可以對全局進行配置也可以對個別資源單獨配置,可以針對單個url進行配置也可以針對文件后綴類型進行配置,可以對正常資源進行配置也可以對故障信息(狀態碼400以上)進行配置,可以對靜態資源進行配置也可以對動態資源單獨配置,現在就剖開看一下。
 

一、HTTP響應頭信息配置緩存級別

任何cache系統大多數資源都是通過HTTP頭信息來判斷是否可緩存的,ATS同樣如此,此頭信息的配置是資源是否cache的一個必要條件,并且根據頭部信息的情況將資源分為3個級別,分別是:

  • 2、有明確的緩存生命周期,具體表現是響應頭里有expires(到什么時間過期)或者有Cache-Control:(max-age、no-cache),這種設置對用戶最負責任,不會出錯,我們線上ATS默認使用這個級別;

  • 1、有Last-Modified頭或者有明確的緩存生命周期,這個級別就要松一些了,即使資源沒有明確的緩存周期,但是通過Last-Modified頭結合ATS自身的算法機制(引進了老化因子的概念)計算出緩存時間,對資源進行緩存,存多久看后面的第五條;

  • 0、在級別1的基礎上,對沒有明確頭部信息的資源,默認存入本地緩存,存多久見后面第五條,然后每次if-modified-since回源。

      具體對應的配置如下:

      proxy.config.http.cache.required_headers  0|1|2    (0是無要求,1是有Last-Modified頭或者有明確的緩存生命周期,2是有明確的緩存生命周期)

此為ATS所有內容是否可緩存的必要不充分條件。 

 

二、動態內容是否緩存

ATS不會像人一樣通過理性判斷去確定資源是否為動態,他對動靜態資源的判斷完全是依賴url特征匹配,我們線上的默認配置是不緩存,對應的配置參數是:

      proxy.config.http.cache.cache_urls_that_look_dynamic   0|1  (0是不緩存,1是可緩存) 

 此為動態內容ATS是否可緩存的必要不充分條件。

三、帶cookie的資源是否緩存

web2.0的網站中,很多資源帶有cookie,對于cookie的信息是否緩存,如何緩存才能不影響用戶質量考驗著cache系統的性能,ATS對于cookie的設置分5個級別:

      proxy.config.http.cache.cache_responses_to_cookies INT  0|1|2|3|4
 

  • 0、任何帶cookie的資源都不緩存;

  • 1、任何帶cookie的資源都緩存;

  • 2、只緩存是圖片的cookie資源;

  • 3、除了文本類型其余的cookie資源都緩存。

  • 4、除了系統響應的沒有”Set-Cookie”或者有”Cache-Control:public”的文本類型其余的cookie資源都緩存。(我們線上設備的默認配置級別)

 此為cookie內容ATS是否可緩存的必要不充分條件。

四、故障信息是否緩存

所謂故障信息指的是源站返回的4XX、5XX等錯誤代碼,對于故障信息是否緩存是存在爭議的,ATS在處理上將故障信息分為兩類,一類是帶有明確生命周期的故障,另一類是沒帶有生命周期的故障,配置的參數如下:

        proxy.config.http.negative_caching_enabled  0|1  (1對所有故障信息都緩存,0是只緩存有明確生命周期的故障信息,線上默認使用的是0)

        proxy.config.http.negative_caching_lifetime   2s   (對有明確緩存生命周期的故障信息的緩存時間,可以根據時間時間設置,目前線上默認改為2s 


五、對于請求頭、響應頭中無任何緩存說明的信息資源

   對于這種信息ats是通過proxy.config.http.cache.required_headers頭再加上默認時間指令來控制的,比如header頭設置的是0級別,就是說對于頭部信息設置最寬松的策略,這時一個請求,如果沒有Cache-control、expires、Last-Modified這些字段,但是有Last-Modified頭的話,是通過最小化因子計算緩存時間,對應指令和計算方式如下:

      proxy.config.http.cache.heuristic_lm_factor FLOAT 0.100000 (緩存時間=當前時間減Last-Modified時間*0.1

      對于連Last-Modified頭都沒有的信息,是通過默認存儲時間去計算的,這個nginx的判斷邏輯有點類似,不過nginx對于緩存與否是全部判斷了后再操作,但ats是存不存和存多久是分開的,哪怕存儲時間為0也會存一下,這兩條指令如下:

      proxy.config.http.cache.heuristic_min_lifetime INT 3600

      proxy.config.http.cache.heuristic_max_lifetime INT 17280000

      單位是秒,也就是說對這種沒任何緩存說明信息的資源最小存3600秒,最大存17280000秒。

      其實對于線上環境這三條指令都是用不到的,因為我們把header頭的級別設置為了2。


      綜上所述:對于ats而言,存儲設置是很靈活的,可以對各類資源單獨設置,如果覺得還不夠還可以在cache.config(影響cache-control字段)對單個資源進行設置。當然每一環都是有邏輯的,我舉個例子,現在比如我想要對除了授權類型的所有資源進行強制緩存10天,而且緩存期間不回源,可以這么設置:

traffic_line -s proxy.config.http.cache.cache_urls_that_look_dynamic -v 1

traffic_line -s proxy.config.http.cache.cache_responses_to_cookies -v 1

traffic_line -s proxy.config.http.cache.required_headers -v 0

traffic_line -s proxy.config.http.cache.heuristic_min_lifetime -v 8640000

traffic_line -s proxy.config.http.cache.heuristic_max_lifetime -v 8640000

traffic_line -s proxy.config.http.cache.heuristic_lm_factor -v 0.5

traffic_line -s proxy.config.http.cache.when_to_revalidate -v 3 

cache.config    url_regex=.*    scheme=http       ttl-in-cache=240h

自建個人原創站運維網咖社(www.net-add.com),新的博文會在個人站更新,歡迎瀏覽。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女