http --- 缓存
生活随笔
收集整理的這篇文章主要介紹了
http --- 缓存
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Web緩存:
// 是可以自動(dòng)保存常見(jiàn)文檔副本的HTTP設(shè)備. // 當(dāng)Web請(qǐng)求抵達(dá)緩存時(shí),如果本地有"已緩存的"副本,就可以從本地存儲(chǔ)設(shè)備而不是原始服務(wù)器中提取這個(gè)文檔.冗余的數(shù)據(jù)傳輸:
// 有很多客戶(hù)端訪問(wèn)一個(gè)流行的原始服務(wù)器頁(yè)面時(shí),服務(wù)器會(huì)多次傳輸同一份文檔 // 每次傳遞給一個(gè)客戶(hù)端.這樣一些相同的字節(jié)會(huì)在網(wǎng)絡(luò)中一遍遍的傳輸,大 大的降低了網(wǎng)絡(luò)的傳輸效率,浪費(fèi)Web資源. // 有了緩存,就可以保留第一條服務(wù)器響應(yīng)的副本.帶寬瓶頸:
// 很多網(wǎng)絡(luò)為本地網(wǎng)絡(luò)客戶(hù)端提供的帶寬比遠(yuǎn)程服務(wù)器提供的帶寬要寬.因此提供緩存可以提供交互的速度緩存未命中:
// 一些到達(dá)緩存的請(qǐng)求可能會(huì)由于沒(méi)用副本可用,而被轉(zhuǎn)發(fā)給原始服務(wù)器,稱(chēng)為緩存未命中.再驗(yàn)證:
// 原始服務(wù)器的內(nèi)容可能會(huì)發(fā)生變化,緩存要不時(shí)對(duì)其進(jìn)行檢測(cè),看看它們保存的副本是否仍時(shí)服務(wù)器上最新的副本 // 這些"新鮮度檢測(cè)"被稱(chēng)為HTTP再驗(yàn)證再驗(yàn)證命中(緩慢命中):
// 緩存對(duì)緩存的副本進(jìn)行再驗(yàn)證時(shí),會(huì)向原始服務(wù)器發(fā)送一個(gè)小的在驗(yàn)證請(qǐng)求.如果內(nèi)容沒(méi)有變化 // 服務(wù)器會(huì)以一個(gè)小的304 Not Modified進(jìn)行響應(yīng). // 只要緩存知道副本仍然有效,就會(huì)再次將副本標(biāo)識(shí)為暫時(shí)新鮮的,并將副本提供給客戶(hù)端,這被稱(chēng)作在驗(yàn)證命中或緩慢命中緩存命中率:
// 緩存提供服務(wù)的請(qǐng)求所占的比例稱(chēng)為緩存命中率 // 對(duì)中等規(guī)模的Web緩存來(lái)說(shuō),40%的命中率是很合理的字節(jié)命中率:
// 緩存提供的字節(jié)在傳輸?shù)乃凶止?jié)中所占的比例私有緩存:
// 私有緩存不需要很大的存儲(chǔ)空間,這樣可以做得很小很便宜. // Web瀏覽器中有內(nèi)建的私有緩存---大多數(shù)瀏覽器都會(huì)將常用文檔緩存在個(gè)人電腦的磁盤(pán)和內(nèi)存中,并且允許用戶(hù)區(qū)配置緩存的大小和各種設(shè)置公有代理緩存:
// 公有緩存是特殊的共享代理服務(wù)器,被稱(chēng)為緩存代理服務(wù)器(caching proxy server)或常見(jiàn)的代理緩存(proxy cache) // 代理緩存會(huì)從本地緩存中提供文檔,或者代表用戶(hù)于服務(wù)器進(jìn)行聯(lián)系內(nèi)容路由器:
// 有些網(wǎng)絡(luò)結(jié)構(gòu)會(huì)構(gòu)建復(fù)雜的網(wǎng)狀緩存,網(wǎng)狀緩存中的代理緩存之間會(huì)以更加復(fù)雜的方式進(jìn)行對(duì)話(huà),做出動(dòng)態(tài)的緩存通信決策 // 決定與哪個(gè)父緩存進(jìn)行對(duì)話(huà),或者決定繞開(kāi)緩存,直接連接原始服務(wù)器.這種代理緩存會(huì)決定選擇何種路由器對(duì)內(nèi)容進(jìn)行訪問(wèn)、管理和傳送文檔過(guò)期:
// HTTP有一些簡(jiǎn)單的機(jī)制可以再不要求服務(wù)器記住有哪些緩存擁有其文檔副本的情況下,保持已緩存數(shù)據(jù)與服務(wù)器之間充分一致 // HTTP將之稱(chēng)為文檔過(guò)期.// 文檔過(guò)期(Expires首部) HTTP/1.0 200 OK Date: Sat, 29 Jun 2002, 14:30:00 GMT Content-type: text/plain Content-legnth: 67 Expires: Fri, 05 Jul 2002, 05:00:00 GMTIndependence Day sale at Joe`s Hardware Come shop with us today!// Cache-Control: max-age 首部 (最大的生存時(shí)間,單位:秒) HTTP/1.0 200 OK Date: Sat, 29 Jun 2002, 14:30:00 GMT Content-type: text/plain Content-length: 67 Cache-Control: max-age=484200Independence Day sale at Joe`s Hardware Come shop with us today!服務(wù)器再驗(yàn)證:
// 僅僅是已緩存文檔過(guò)期了并不意味著它和原始服務(wù)器上目前處于活躍狀態(tài)的文檔有實(shí)際區(qū)別;只是意味著到了要進(jìn)行核對(duì)的時(shí)間了. // 這種情況稱(chēng)為“服務(wù)器再驗(yàn)證”// If-Modified-Since:Date再驗(yàn)證 // 條件請(qǐng)求 GET /announce.html HTTP/1.0 If-Modified-Since: Sat, 29 Jun 2002, 14:30:00 GMT// 響應(yīng)(成功的在驗(yàn)證) HTTP/1.0 304 Not Modified Date: Wed, 03 Jul 2002, 19:18:23 GMT Expires: Fri, 05 Jul 2002, 14:30:00 GMT// 響應(yīng)(失敗的再驗(yàn)證) HTTP/1.0 200 OK Date: Fri, 05 Jul 2002, 17:54:40 GMT Content-length: 124 Expires: Mon, 09 Sep 2002, 05:00:00 GMTAll exterior house paint on sale through Labor Day. Just Another reason for you to shop this summer at Joe`s Hardware!// If-None-Match:實(shí)體標(biāo)簽再驗(yàn)證(再某些情況下,僅使用最后修改日期再驗(yàn)證是不夠的) // 條件請(qǐng)求 GET /announce.html HTTP/1.0 If-None-Match: "v2.6"// 響應(yīng) HTTP/1.0 304 Not Modified Date: Wed, 03 Jul 2002, 19:18:23 GMT ETag: "v2.6" Expires: Fri, 05 Jul 2002, 05:00:00 GMT// 強(qiáng)弱驗(yàn)證器 // 有時(shí)服務(wù)器希望對(duì)文檔進(jìn)行一些非實(shí)質(zhì)性或不重要的修改時(shí),不要使所有的已緩存副本都失效, // HTTP/1.1支持"弱驗(yàn)證器" // 服務(wù)器會(huì)用"W/"來(lái)標(biāo)識(shí)弱驗(yàn)證器 ETag: W/"v2.6" If-None-Match: W/"v2.6"no-Store與no-Cache響應(yīng)首部
Pragma: no-cache Cache-Control: no-store Cache-Control: no-cache // no-store:禁止緩存對(duì)響應(yīng)進(jìn)行復(fù)制 // no-cache的響應(yīng)在與原始服務(wù)器進(jìn)行新鮮度再驗(yàn)證之前,緩存不能將其提供給客戶(hù)端使用 // 以上2種對(duì)象是HTTP/1.1提供的,為了兼容于HTTP/1.0+,使用了Pragma: no-cachemax-age:
Cache-Control: max-age=3600 Cache-Control: s-maxage=3600 // max-age 此文檔處于新鮮狀態(tài)的秒數(shù) // s-maxage 此文檔處于新鮮狀態(tài)的秒數(shù),但僅適用于共享(公有)緩存// 服務(wù)器請(qǐng)求緩存不緩存該文檔: Cache-Control: max-age=0 Cache-Control: s-maxage = 0Expires:
Expires: Fri, 05 Jul 2002, 05:00:00 GMT // 實(shí)際的過(guò)期日期 // 不推薦使用的原因:許多服務(wù)器的時(shí)鐘都不同步,或者不正確,所以最好用剩余秒數(shù)must-revalidate:
Cache-Control: must-revalidate // 原始服務(wù)器希望緩存嚴(yán)格遵守過(guò)期信息 // 該響應(yīng)首部告訴緩存,在事先沒(méi)有跟原始服務(wù)器進(jìn)行再驗(yàn)證的情況下,不能提供對(duì)這個(gè)對(duì)象的陳舊副本試探性過(guò)期
// 如果響應(yīng)種沒(méi)有Cache-Control: max-age首部,也沒(méi)有Expires首部,緩存可以計(jì)算出一個(gè)試探性最大使用期 // 如果得到的最大試用期大于24小時(shí),就應(yīng)該向響應(yīng)首部添加一個(gè)Heuristic Expiration WarningLM-Factor算法: // 邏輯: // 如果已緩存文檔最后一次修改發(fā)生在很久以前,它可能會(huì)是一份穩(wěn)定的文檔,不太會(huì)突然發(fā)生變化 ,因此將其繼續(xù)保存在緩存中 // 如果已緩存文檔近期被修改過(guò),就說(shuō)明它很可能會(huì)頻繁發(fā)生變化,因此在與服務(wù)器進(jìn)行再驗(yàn)證之前,只應(yīng)該將其緩存很短一段時(shí)間 // 下面是LM-factor算法的Perl偽代碼: $time_since_modify = max(0, $server_Date - $server_Last_Modified); $server_freshness_limit = int($time_since_modify * $lm_factor);Apache關(guān)于緩存的HTTP首部
// mod_headers // 將某目錄下的所有HTML文件都標(biāo)識(shí)為非緩存 <Files * .html>Header set Cache-control no-cache </Files>// mode_expires // 將文檔的過(guò)期日期設(shè)置為對(duì)其最后一次被訪問(wèn)之后或者其最近修改日期之后的某一時(shí)間 // 可以為不同的文件類(lèi)型設(shè)置不同的過(guò)期日期 ExpiresDefault A3600 ExpiresDefault M86400 ExpiresDefault "access plus 1 week" ExpiresByType text/html "modification plus 2 days 6 hours 12 minutes"通過(guò)HTTP-EQUIV控制HTML緩存
// 讓coder無(wú)需與Web服務(wù)器的配置文件進(jìn)行交互,能夠更容易地為所提供地HTML文檔分配HTTP首部信息 // HTML2.0 定義了 <META HTTP-EQUIV>標(biāo)簽 <HTML><HEAD><TITLE>My Document</TITLE><META HTTP-EQUIV="Cache-control" CONNECT="no-cache"></HEAD>... </HTML>新鮮度算法(服務(wù)器)
sub server_freshness_limit {local($heuristic, $server_freshness_limit,$time_since_last_modify);$heuristic = 0;if ($Max_Age_value_set) {$server_freshness_limit = $Max_Age_value;} else if ($Expires_value_set) {$server_freshness_limit = $Expires_value - $Date_value;} else if($Last_Modified_value_set) {$time_since_last_modify = max(0, $Date_value - $Last_Modified_value);$server_freshness_limit = int($time_since_last_modify * $lm_factor);$heuristic = 1;} else{$server_freshness_limit = $default_cache_min_lifetime;$heuristic = 1;}if($heuristic) {if($server_freshness_limit > $default_cache_max_lifetime) {$server_freshness_limit = $default_cache_max_lifetime;}if( $server_freshness_limit < $default_cache_min_lifetime) {$server_freshness_limit = $default_cache_min_lifetime;}return ($server_freshness_limit);} }新鮮度算法(客戶(hù)端)
sub client_modified_freshness_limit {$age_limit = server_freshness_limit();if($Max_Stale_value_set) {if( $Max_Stale_value == $INT_MAX){$age_limit = $INT_MAX;} else{$age_limit = server_freshness_limit() + $Max_Stale_value;}}if( $Min_Fresh_value_set) {$get_limit = min($age_limit, server_freshness_limit() - $Min_Fresh_value_set);}if($Max_Age_value_set) {$age_limit = min($age_limit, $Max_Age_value);} }參考 《HTTP權(quán)威指南》第7章
總結(jié)
以上是生活随笔為你收集整理的http --- 缓存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python qq群文件_Python随
- 下一篇: linux编译ffmepg,在Ubunt