以下僅為個人觀點,有誤勿噴,多指正。人的一項基本功能就是認識錯誤。你不會變得更好,你只是儘量減少犯錯。
一、下圖為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 包裹動態元件時,會快取不活動的元件例項,而不是銷毀它們。和相似,是乙個抽象元...