squid 快取與不快取的流程分析

2021-07-25 09:36:06 字數 2489 閱讀 6740

以下僅為個人觀點,有誤勿噴,多指正。人的一項基本功能就是認識錯誤。你不會變得更好,你只是儘量減少犯錯。

一、下圖為squid處理request過程中,對請求進行hit or miss 判斷的呼叫過程。

二、命令解釋

no-cache指示請求或響應訊息不能快取

reload_into_ims的意思是將client的http請求中的no-cache或reload請求轉變成if-modified-since

三、命令對應squid結構體中的標誌位

clientchecknocache (no_cache命令)對應  request->flags.cachable

refresh_pattern ignore-no-cache          對應   refresh_t->flags.ignore_no_cache

源站cache-control:no_cache              對應  rep->cache_control.mask 

客戶端cache-control:no_chache          對應 request->flags.nocache

reload_into_ims                               對應config.onoff.reload_into_ims

refresh_pattern reload_into_ims對應refresh_nocache_hack

四、處理客戶端請求

1、clientstoreurlrewritedone--》clientfinishrewritestuff---》clientinterpretrequestheaders--》  \

a.  通過pargma:no-cache和cache-control:no-cache來對no_cache進行累加。

b.   通過if (no_cache)

2、經過clientchecknocache(no_cache命令)對request->flags.cachable賦值。       

3、hit流程。clientprocessrequest2裡: a:   request->flags.cachable判斷log_tcp_miss

b:r->flags.nocache判斷log_tcp_client_refresh_miss

c:clientcheckrangeforcemiss-》rangeoffsetlimit判斷log_tcp_miss

4、hit流程。refreshcheckhttpstale -->refreshcheck 是通過http過期時間(不光是時間,refresh_pattern裡的引數大部分在這判斷)判斷,如http沒有過期時間用refresh_pattern的過期時間判斷是否過期,如果過期,走回源校驗流程;如不過期:etag一樣-返304,不一樣返200帶資料。

五、處理源站回包

進入到miss的請求,如果有storeentry(如四中幾種miss),將先storeunlockobject掉entry,後面重新建storeentry。

過期回源校驗流程是對http->entry->mem_obj->ims_entry處理。 clientproces***pired--》 clienthandleimsreply

a、回源httpcachablereply-------》if (ebit_test(rep->cache_control, cc_no_cache) && !refresh_override(ignore_no_cache))  判斷是否快取

b、 回源httpcachablereply-------》refreshiscachable---》refreshcheck是否過期判斷是否可快取 return 0 ,不快取

c、不被快取,httpprocessreplyheader將呼叫httpmakeprivate設定release_request。

e、然後在呼叫storeclientcopy3後,因為拷貝到記憶體,會記憶體命中,然後走進storelowestmemreaderoffset,關閉swap和摘除storeentry,然後直接clientsendheader給客戶端。

奇怪的squid快取

乙個asp頁面 response.cachecontrol max age 120 response.write now 一 max age必須大於120,不然不能快取 二 開始squid返回的http header的age值就55!實際快取時間為 120 55 65 另乙個asp頁面 respon...

squid快取清除的方法

如何清除squid 快取 1 首先在squid 的主配置檔案中新增acl 列表,並允許受信任的主機有許可權清除快取 2 清除squid 中一條快取 usr local squid bi squidclient h 192.168.1.145 p 80 m purge 3 批量清除squid 快取中的...

squid 不快取特定頁面 Vue實現頁面快取

在 使用vue開發時,當進行頁面之間的切換時,上乙個頁面將會被銷毀。但是當我們想節省效能以及保留使用者上次操作的結果或避免ajax重複請求的時候,需要把某些特定的頁面快取下來。在vue中,提供了內建元件keep alive 包裹動態元件時,會快取不活動的元件例項,而不是銷毀它們。和相似,是乙個抽象元...