在线日本妇人成熟免费99精品_a级黄韩国在线观看免费_搭讪人妻中出气质人妻电影_在线观看激情五月

廣東福建浙江江蘇上海北京山東遼寧江西河南四川湖北湖南廣西安徽黑龍江天津重慶吉林河北貴州甘肅山西云南新疆寧夏海南陜西西藏青海內(nèi)蒙古

新聞中心

什么是Web緩存 為什么使用什么是Web緩存?
發(fā)布時(shí)間:2014-10-12 00:13:22
什么是Web緩存,為什么要使用它?Web緩存位于Web服務(wù)器之間(1個(gè)或多個(gè),內(nèi)容源服務(wù)器)和客戶端之間(1個(gè)或多個(gè)):緩存會(huì)根據(jù)進(jìn)來(lái)的請(qǐng)求保存輸出內(nèi)容的副本,例如html頁(yè)面, 圖片,文件(統(tǒng)稱為副本),然后,當(dāng)下一個(gè)請(qǐng)求來(lái)到的時(shí)候:如果是相同的URL,緩存直接使用副本響應(yīng)訪問請(qǐng)求,而不是向源服務(wù)器再次發(fā)送請(qǐng)求。
  使用緩存主要有2大理由:
  減少相應(yīng)延遲:因?yàn)檎?qǐng)求從緩存服務(wù)器(離客戶端更近)而不是源服務(wù)器被相應(yīng),這個(gè)過程耗時(shí)更少,讓web服務(wù)器看上去相應(yīng)更快;
  減少網(wǎng)絡(luò)帶寬消耗:當(dāng)副本被重用時(shí)會(huì)減低客戶端的帶寬消耗;客戶可以節(jié)省帶寬費(fèi)用,控制帶寬的需求的增長(zhǎng)并更易于管理。
  緩存的類型瀏覽器緩存 對(duì)于新一代的Web瀏覽器來(lái)說(例如:IE,F(xiàn)irefox):一般都能在設(shè)置對(duì)話框中發(fā)現(xiàn)關(guān)于緩存的設(shè)置,通過在你的電腦上僻處一塊硬盤空間用于存儲(chǔ)你已經(jīng)看過的網(wǎng)站的副本。瀏覽器緩存根據(jù)非常簡(jiǎn)單的規(guī)則進(jìn)行工作:在同一個(gè)會(huì)話過程中(在當(dāng)前瀏覽器沒有被關(guān)閉之前)會(huì)檢查一次并確定緩存的副本足夠新。這個(gè)緩存對(duì)于用戶點(diǎn)擊“后退”或者點(diǎn)擊剛訪問過的鏈接特別有用,如果你瀏覽過程中訪問到同一個(gè)圖片,這些圖片可以從瀏覽器緩存中調(diào)出而即時(shí)顯現(xiàn)。
  代理服務(wù)器緩存Web代理服務(wù)器使用同樣的緩存原理,只是規(guī)模更大。代理服務(wù)器群為成百上千用戶服務(wù)使用同樣的機(jī)制;大公司和ISP經(jīng)常在他們的防火墻上架設(shè)代理緩存或者單獨(dú)的緩存設(shè)備;
  由于帶路服務(wù)器緩存并非客戶端或者源服務(wù)器的一部分,而是位于原網(wǎng)絡(luò)之外,請(qǐng)求必須路由到他們才能起作用。一個(gè)方法是手工設(shè)置你的瀏覽器:告訴瀏覽器使用 那個(gè)代理,另外一個(gè)是通過中間服務(wù)器:這個(gè)中間服務(wù)器處理所有的web請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)到后臺(tái)網(wǎng)絡(luò),而用戶不必配置代理,甚至不必知道代理的存在;
  代理服務(wù)器緩存:是一個(gè)共享緩存,不只為一個(gè)用戶服務(wù),經(jīng)常為大量用戶使用,因此在減少相應(yīng)時(shí)間和帶寬使用方面很有效:因?yàn)橥粋(gè)副本會(huì)被重用多次。
  網(wǎng)關(guān)緩存也被稱為反向代理緩存或間接代理緩存,網(wǎng)關(guān)緩存也是一個(gè)中間服務(wù)器,和內(nèi)網(wǎng)管理員部署緩存用于節(jié)省帶寬不同:網(wǎng)關(guān)緩存一般是網(wǎng)站管理員自己部署:讓他們的網(wǎng)站更容易擴(kuò)展并獲得更好的性能;
  請(qǐng)求有幾種方法被路由到網(wǎng)關(guān)緩存服務(wù)器上:其中典型的是讓用一臺(tái)或多臺(tái)負(fù)載均衡服務(wù)器從客戶端看上去是源服務(wù)器;
  網(wǎng)絡(luò)內(nèi)容發(fā)布商 (Content delivery networks CDNs)分布網(wǎng)關(guān)緩存到整個(gè)(或部分)互聯(lián)網(wǎng)上,并出售緩存服務(wù)給需要的網(wǎng)站,Speedera和Akamai就是典型的網(wǎng)絡(luò)內(nèi)容發(fā)布商(下文簡(jiǎn)稱CDN)。
  本問主要關(guān)注于瀏覽器和代理緩存,當(dāng)然,有些信息對(duì)于網(wǎng)關(guān)緩存也同樣有效;
  Web緩存無(wú)害嗎?為什么要鼓勵(lì)緩存?Web緩存在互聯(lián)網(wǎng)上最容易被誤解的技術(shù)之一:網(wǎng)站管理員經(jīng)常怕對(duì)網(wǎng)站失去控制,由于代理緩存會(huì)“隱藏”他們的用戶,讓他們感覺難以監(jiān)控誰(shuí)在使用他們的網(wǎng)站。
  不幸的是:就算不考慮Web緩存,互聯(lián)網(wǎng)上也有很多網(wǎng)站使用非常多的參數(shù)以便管理員精確地跟蹤用戶如何使用他們的網(wǎng)站;如果這類問題也是你關(guān)心的,本文將告訴你如何獲得精確的統(tǒng)計(jì)而不必將網(wǎng)站設(shè)計(jì)的非常緩存不友好。
  另外一個(gè)抱怨是緩存會(huì)給用戶過期或失效的數(shù)據(jù);無(wú)論如何:本文可以告訴你怎樣配置你的服務(wù)器來(lái)控制你的內(nèi)容將被如何緩存。
  CDN是另外一個(gè)有趣的方向,和其他代理緩存不同:CDN的網(wǎng)關(guān)緩存為希望被緩存的網(wǎng)站服務(wù),沒有以上顧慮。即使你使用了CDN,你也要考慮后續(xù)的代理服務(wù)器緩存和瀏覽器緩存問題。
  另外一方面:如果良好地規(guī)劃了你的網(wǎng)站,緩存會(huì)有助于網(wǎng)站服務(wù)更快,并節(jié)省服務(wù)器負(fù)載和互聯(lián)網(wǎng)的鏈接請(qǐng)求。這個(gè)改善是顯著的:一個(gè)難以緩存的網(wǎng)站可能需要幾秒去載入頁(yè)面,而對(duì)比有緩存的網(wǎng)站頁(yè)面幾乎是即時(shí)顯現(xiàn):用戶更喜歡速度快的網(wǎng)站并更經(jīng)常的訪問;
  這樣想:很多大型互聯(lián)網(wǎng)公司為全世界服務(wù)器群投入上百萬(wàn)資金,為的就是讓用戶訪問盡可能快,客戶端緩存也是這個(gè)目的,只不過更靠近用戶一端,而且最好的一點(diǎn)是你甚至根本不用為此付費(fèi)。
  事實(shí)上,無(wú)論你是否喜歡,代理服務(wù)器和瀏覽器都回啟用緩存。如果你沒有配置網(wǎng)站正確的緩存,他們會(huì)按照缺省或者緩存管理員的策略進(jìn)行緩存。
  緩存如何工作所有的緩存都用一套規(guī)則來(lái)幫助他們決定什么時(shí)候使用緩存中的副本提供服務(wù)(假設(shè)有副本可用的情況下);一些規(guī)則在協(xié)議中有定義(HTTP協(xié)議1.0和1.1),一些規(guī)則由緩存的管理員設(shè)置(瀏覽器的用戶或者代理服務(wù)器的管理員);
  一般說來(lái):遵循以下基本的規(guī)則(不必?fù)?dān)心,你不必知道所有的細(xì)節(jié),細(xì)節(jié)將隨后說明)
  如果響應(yīng)頭信息:告訴緩存器不要保留緩存,緩存器就不會(huì)緩存相應(yīng)內(nèi)容;
  如果請(qǐng)求信息是需要認(rèn)證或者安全加密的,相應(yīng)內(nèi)容也不會(huì)被緩存;
  如果在回應(yīng)中不存在校驗(yàn)器(ETag或者Last-Modified頭信息),緩存服務(wù)器會(huì)認(rèn)為缺乏直接的更新度信息,內(nèi)容將會(huì)被認(rèn)為不可緩存。
  一個(gè)緩存的副本如果含有以下信息:內(nèi)容將會(huì)被認(rèn)為是足夠新的
  含有完整的過期時(shí)間和壽命控制頭信息,并且內(nèi)容仍在保鮮期內(nèi);
  瀏覽器已經(jīng)使用過緩存副本,并且在一個(gè)會(huì)話中已經(jīng)檢查過內(nèi)容的新鮮度;
  緩存代理服務(wù)器近期內(nèi)已經(jīng)使用過緩存副本,并且內(nèi)容的最后更新時(shí)間在上次使用期之前;
  夠新的副本將直接從緩存中送出,而不會(huì)向源服務(wù)器發(fā)送請(qǐng)求;
  如果緩存的副本已經(jīng)太舊了,緩存服務(wù)器將向源服務(wù)器發(fā)出請(qǐng)求校驗(yàn)請(qǐng)求,用于確定是否可以繼續(xù)使用當(dāng)前拷貝繼續(xù)服務(wù);
  總之:新鮮度和校驗(yàn)是確定內(nèi)容是否可用的最重要途徑:
  如果副本足夠新,從緩存中提取就立刻能用了;
  而經(jīng)緩存器校驗(yàn)后發(fā)現(xiàn)副本的原件沒有變化,系統(tǒng)也會(huì)避免將副本內(nèi)容從源服務(wù)器整個(gè)重新傳輸一遍。
  如何控制(控制不)緩存有很多工具可以幫助設(shè)計(jì)師和網(wǎng)站管理員調(diào)整緩存服務(wù)器對(duì)待網(wǎng)站的方式,這也許需要你親自下手對(duì)服務(wù)器的配置進(jìn)行一些調(diào)整,但絕對(duì)值得;了解如何使用這些工具請(qǐng)參考后面的實(shí)現(xiàn)章節(jié);
  HTML meta標(biāo)簽和HTTP 頭信息HTML的編寫者會(huì)在文檔的區(qū)域中加入描述文檔的各種屬性,這些META標(biāo)簽常常被用于標(biāo)記文檔不可以被緩存或者標(biāo)記多長(zhǎng)時(shí)間后過期;
  META標(biāo)簽使用很簡(jiǎn)單:但是效率并不高,因?yàn)橹挥袔追N瀏覽器會(huì)遵循這個(gè)標(biāo)記(那些真正會(huì)“讀懂”HTML的瀏覽器),沒有一種緩存代理服務(wù)器能遵循這個(gè) 規(guī)則(因?yàn)樗鼈儙缀跬耆唤馕鑫臋n中HTML內(nèi)容);有事會(huì)在Web頁(yè)面中增加:Pragma: no-cache這個(gè)META標(biāo)記,如果要讓頁(yè)面保持刷新,這個(gè)標(biāo)簽其實(shí)完全沒有必要。
  如果你的網(wǎng)站托管在ISP機(jī)房中,并且機(jī)房可能不給你權(quán)限去控制HTTP的頭信息(如:Expires和Cache-Control),大聲控訴:這些機(jī)制對(duì)于你的工作來(lái)說是必須的;
  另外一方面: HTTP頭信息可以讓你對(duì)瀏覽器和代理服務(wù)器如何處理你的副本進(jìn)行更多的控制。他們?cè)贖TML代碼中是看不見的,一般由Web服務(wù)器自動(dòng)生成。但是,根據(jù) 你使用的服務(wù),你可以在某種程度上進(jìn)行控制。在下文中:你將看到一些有趣的HTTP頭信息,和如何在你的站點(diǎn)上應(yīng)用部署這些特性。
  HTTP頭信息發(fā)送在HTML代碼之前,只有被瀏覽器和一些中間緩存能看到,一個(gè)典型的HTTP 1.1協(xié)議返回的頭信息看上去像這樣:
  HTTP/1.1 200 OK
  Date: Fri, 30 Oct 1998 13:19:41 GMT
  Server: Apache/1.3.3 (Unix)
  Cache-Control: max-age=3600, must-revalidate
  Expires: Fri, 30 Oct 1998 14:19:41 GMT
  Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT
  ETag: "3e86-410-3596fbbc"
  Content-Length: 1040
  Content-Type: text/html
  在頭信息空一行后是HTML代碼的輸出,關(guān)于如何設(shè)置HTTP頭信息請(qǐng)參考實(shí)現(xiàn)章節(jié);
  Pragma HTTP頭信息 (為什么它不起作用)很多人認(rèn)為在HTTP頭信息中設(shè)置了Pragma: no-cache后會(huì)讓內(nèi)容無(wú)法被緩存。但事實(shí)并非如此:HTTP的規(guī)范中,響應(yīng)型頭信息沒有任何關(guān)于Pragma屬性的說明,而討論了的是請(qǐng)求型頭信息 Pragma屬性(頭信息也由瀏覽器發(fā)送給服務(wù)器),雖然少數(shù)集中緩存服務(wù)器會(huì)遵循這個(gè)頭信息,但大部分不會(huì)。用了Pragma也不起什么作用,要用就使 用下列頭信息:
  使用Expires(過期時(shí)間)HTTP頭信息來(lái)控制保鮮期Expires(過期時(shí)間) 屬性是HTTP控制緩存的基本手段,這個(gè)屬性告訴緩存器:相關(guān)副本在多長(zhǎng)時(shí)間內(nèi)是新鮮的。過了這個(gè)時(shí)間,緩存器就會(huì)向源服務(wù)器發(fā)送請(qǐng)求,檢查文檔是否被修改。幾乎所有的緩存服務(wù)器都支持Expires(過期時(shí)間)屬性;
  大部分Web服務(wù)器支持你用幾種方式設(shè)置Expires屬性;一般的:可以設(shè)計(jì)一個(gè)絕對(duì)時(shí)間間隔:基于客戶最后查看副本的時(shí)間(最后訪問時(shí)間)或者根據(jù)服務(wù)器上文檔最后被修改的時(shí)間;
  Expires頭信息:對(duì)于設(shè)置靜態(tài)圖片文件(例如導(dǎo)航欄和圖片按鈕)可緩存特別有用;因?yàn)檫@些圖片修改很少,你可以給它們?cè)O(shè)置一個(gè)特別長(zhǎng)的過期時(shí)間,這會(huì)使你的網(wǎng)站對(duì)用戶變得相應(yīng)非常快;他們對(duì)于控制有規(guī)律改變的網(wǎng)頁(yè)也很有用,例如:你每天早上6點(diǎn)更新新聞頁(yè),你可以設(shè)置副本的過期時(shí)間也是這個(gè)時(shí)間,這樣緩存 服務(wù)器就知道什么時(shí)候去取一個(gè)更新版本,而不必讓用戶去按瀏覽器的“刷新”按鈕。
  過期時(shí)間頭信息屬性值只能是HTTP格式的日期時(shí)間,其他的都會(huì)被解析成當(dāng)前時(shí)間“之前”,副本會(huì)過期,記住:HTTP的日期時(shí)間必須是格林威治時(shí)間(GMT),而不是本地時(shí)間。舉例:
  Expires: Fri, 30 Oct 1998 14:19:41 GMT
  所以使用過期時(shí)間屬性一定要確認(rèn)你的Web服務(wù)器時(shí)間設(shè)置正確,一個(gè)途徑是通過網(wǎng)絡(luò)時(shí)間同步協(xié)議(Network Time Protocol NTP),和你的系統(tǒng)管理員那里你可以了解更多細(xì)節(jié)。
  雖然過期時(shí)間屬性非常有用,但是它還是有些局限,首先:是牽扯到了日期,這樣Web服務(wù)器的時(shí)間和緩存服務(wù)器的時(shí)間必須是同步的,如果有些不同步,要么是應(yīng)該緩存的內(nèi)容提前過期了,要么是過期結(jié)果沒及時(shí)更新。
  還有一個(gè)過期時(shí)間設(shè)置的問題也不容忽視:如果你設(shè)置的過期時(shí)間是一個(gè)固定的時(shí)間,如果你返回內(nèi)容的時(shí)候又沒有連帶更新下次過期的時(shí)間,那么之后所有訪問請(qǐng)求都會(huì)被發(fā)送給源Web服務(wù)器,反而增加了負(fù)載和響應(yīng)時(shí)間;
  Cache-Control(緩存控制) HTTP頭信息HTTP 1.1介紹了另外一組頭信息屬性:Cache-Control響應(yīng)頭信息,讓網(wǎng)站的發(fā)布者可以更全面的控制他們的內(nèi)容,并定位過期時(shí)間的限制。
  有用的 Cache-Control響應(yīng)頭信息包括:
  max-age=[秒] — 執(zhí)行緩存被認(rèn)為是最新的最長(zhǎng)時(shí)間。類似于過期時(shí)間,這個(gè)參數(shù)是基于請(qǐng)求時(shí)間的相對(duì)時(shí)間間隔,而不是絕對(duì)過期時(shí)間,[秒]是一個(gè)數(shù)字,單位是秒:從請(qǐng)求時(shí)間開始到過期時(shí)間之間的秒數(shù)。
  s-maxage=[秒] — 類似于max-age屬性,除了他應(yīng)用于共享(如:代理服務(wù)器)緩存
  public — 標(biāo)記認(rèn)證內(nèi)容也可以被緩存,一般來(lái)說: 經(jīng)過HTTP認(rèn)證才能訪問的內(nèi)容,輸出是自動(dòng)不可以緩存的;
  no-cache — 強(qiáng)制每次請(qǐng)求直接發(fā)送給源服務(wù)器,而不經(jīng)過本地緩存版本的校驗(yàn)。這對(duì)于需要確認(rèn)認(rèn)證應(yīng)用很有用(可以和public結(jié)合使用),或者嚴(yán)格要求使用最新數(shù)據(jù)的應(yīng)用(不惜犧牲使用緩存的所有好處);
  no-store — 強(qiáng)制緩存在任何情況下都不要保留任何副本
  must-revalidate — 告訴緩存必須遵循所有你給予副本的新鮮度的,HTTP允許緩存在某些特定情況下返回過期數(shù)據(jù),指定了這個(gè)屬性,你高速緩存,你希望嚴(yán)格的遵循你的規(guī)則。
  proxy-revalidate — 和 must-revalidate類似,除了他只對(duì)緩存代理服務(wù)器起作用
  舉例:
  Cache-Control: max-age=3600, must-revalidate
  如果你計(jì)劃試用Cache-Control屬性,你應(yīng)該看一下這篇HTTP文檔,詳見參考和深入閱讀;
  校驗(yàn)參數(shù)和校驗(yàn)在Web緩存如何工作: 我們說過:校驗(yàn)是當(dāng)副本已經(jīng)修改后,服務(wù)器和緩存之間的通訊機(jī)制;使用這個(gè)機(jī)制:緩存服務(wù)器可以避免副本實(shí)際上仍然足夠新的情況下重復(fù)下載整個(gè)原件。
  校驗(yàn)參數(shù)非常重要,如果1個(gè)不存在,并且沒有任何信息說明保鮮期(Expires或Cache-Control)的情況下,緩存將不會(huì)存儲(chǔ)任何副本;
  最常見的校驗(yàn)參數(shù)是文檔的最后修改時(shí)間,通過最后Last-Modified頭信息可以,當(dāng)一份緩存包含Last-Modified信息,他基于此信息,通過添加一個(gè)If-Modified-Since請(qǐng)求參數(shù),向服務(wù)器查詢:這個(gè)副本從上次查看后是否被修改了。
  HTTP 1.1介紹了另外一個(gè)校驗(yàn)參數(shù): ETag,服務(wù)器是服務(wù)器生成的唯一標(biāo)識(shí)符ETag,每次副本的標(biāo)簽都會(huì)變化。由于服務(wù)器控制了ETag如何生成,緩存服務(wù)器可以通過If-None-Match請(qǐng)求的返回沒變則當(dāng)前副本和原件完全一致。
  所有的緩存服務(wù)器都使用Last-Modified時(shí)間來(lái)確定副本是否夠新,而ETag校驗(yàn)正變得越來(lái)越流行;
  所有新一代的Web服務(wù)器都對(duì)靜態(tài)內(nèi)容(如:文件)自動(dòng)生成ETag和Last-Modified頭信息,而你不必做任何設(shè)置。但是,服務(wù)器對(duì)于動(dòng)態(tài)內(nèi)容(例如:CGI,ASP或數(shù)據(jù)庫(kù)生成的網(wǎng)站)并不知道如何生成這些信息,參考一下編寫利于緩存的腳本章節(jié);
  創(chuàng)建利于緩存網(wǎng)站的竅門除了使用新鮮度信息和校驗(yàn),你還有很多方法使你的網(wǎng)站緩存友好。
  保持URL穩(wěn)定: 這是緩存的金科玉律,如果你給在不同的頁(yè)面上,給不同用戶或者從不同的站點(diǎn)上提供相同的內(nèi)容,應(yīng)該使用相同的URL,這是使你的網(wǎng)站緩存友好最簡(jiǎn)單,也是 最高效的方法。例如:如果你在頁(yè)面上使用 "/index.html" 做為引用,那么就一直用這個(gè)地址;
  使用一個(gè)共用的庫(kù)存放每頁(yè)都引用的圖片和其他頁(yè)面元素;
  對(duì)于不經(jīng)常改變的圖片/頁(yè)面啟用緩存,并使用Cache-Control: max-age屬性設(shè)置一個(gè)較長(zhǎng)的過期時(shí)間;
  對(duì)于定期更新的內(nèi)容設(shè)置一個(gè)緩存服務(wù)器可識(shí)別的max-age屬性或過期時(shí)間;
  如果數(shù)據(jù)源(特別是下載文件)變更,修改名稱,這樣:你可以讓其很長(zhǎng)時(shí)間不過期,并且保證服務(wù)的是正確的版本;而鏈接到下載文件的頁(yè)面是一個(gè)需要設(shè)置較短過期時(shí)間的頁(yè)面。
  萬(wàn)不得已不要改變文件,否則你會(huì)提供一個(gè)非常新的Last-Modified日期;例如:當(dāng)你更新了網(wǎng)站,不要復(fù)制整個(gè)網(wǎng)站的所有文件,只上傳你修改的文件。
  只在必要的時(shí)候使用Cookie,cookie是非常難被緩存的,而且在大多數(shù)情況下是不必要的,如果使用cookie,控制在動(dòng)態(tài)網(wǎng)頁(yè)上;
  減少試用SSL,加密的頁(yè)面不會(huì)被任何共享緩存服務(wù)器緩存,只在必要的時(shí)候使用,并且在SSL頁(yè)面上減少圖片的使用;
  使用可緩存性評(píng)估引擎,這對(duì)于你實(shí)踐本文的很多概念都很有幫助;
  編寫利于緩存的腳本腳本缺省不會(huì)返回校驗(yàn)參數(shù)(返回Last-Modified或ETag頭信息)或其他新鮮度信息(Expires或Cache-Control),有些動(dòng)態(tài)腳本的確是動(dòng)態(tài)內(nèi)容(每次相應(yīng)內(nèi)容都不一樣),但是更多(搜索引擎,數(shù)據(jù)庫(kù)引擎網(wǎng)站)網(wǎng)站還是能從緩存友好中獲益的。
  一般說來(lái),如果腳本生成的輸出在未來(lái)一段時(shí)間(幾分鐘或者幾天)都是可重復(fù)復(fù)制的,那么就是可緩存的。如果腳本輸出內(nèi)容只隨URL變化而變化,也是可緩存的;但如果輸出會(huì)根據(jù)cookie,認(rèn)證信息或者其他外部條件變化,則還是不可緩存的。
  最利于緩存的腳本就是將內(nèi)容改變時(shí)導(dǎo)出成靜態(tài)文件,Web服務(wù)器可以將其當(dāng)作另外一個(gè)網(wǎng)頁(yè)并生成和試用校驗(yàn)參數(shù),讓一些都變得更簡(jiǎn)單,只需要寫入文件即可,這樣最后修改時(shí)間也有了;
  另外一個(gè)讓腳本可緩存的方法是對(duì)一段時(shí)間內(nèi)能保持較新的內(nèi)容設(shè)置一個(gè)相對(duì)壽命的頭信息,雖然通過Expires頭信息也可以實(shí)現(xiàn),但更容易的是用Cache-Control: max-age屬性,它會(huì)讓首次請(qǐng)求后一段時(shí)間內(nèi)緩存保持新鮮;
  如果以上做法你都做不到,你可以讓腳本生成一個(gè)校驗(yàn)屬性,并對(duì) If-Modified-Since 和/或If-None-Match請(qǐng)求作出反應(yīng),這些屬性可以從解析HTTP頭信息得到,并對(duì)符合條件的內(nèi)容返回304 Not Modified(內(nèi)容未改變),可惜的是,這種做法比不上前2種高效;
  其他竅門:
  盡量避免使用POST,除非萬(wàn)不得已,POST模式的返回內(nèi)容不會(huì)被大部分緩存服務(wù)器保存,如果你發(fā)送內(nèi)容通過URL和查詢(通過GET模式)的內(nèi)容可以緩存下來(lái)供以后使用;
  不要在URL中加入針對(duì)每個(gè)用戶的識(shí)別信息:除非內(nèi)容是針對(duì)每個(gè)用戶不同的;
  不要統(tǒng)計(jì)一個(gè)用戶來(lái)自一個(gè)地址的所有請(qǐng)求,因?yàn)榫彺娉3J且黄鸸ぷ鞯?
  生成并返回Content-Length頭信息,如果方便的話,這個(gè)屬性讓你的腳本在可持續(xù)鏈接模式時(shí):客戶端可以通過一個(gè)TCP/IP鏈接同時(shí)請(qǐng)求多個(gè)副本,而不是為每次請(qǐng)求單獨(dú)建立鏈接,這樣你的網(wǎng)站相應(yīng)會(huì)快很多;
  具體定義請(qǐng)參考實(shí)現(xiàn)章節(jié)。 常見問題解答讓網(wǎng)站變得可緩存的要點(diǎn)是什么?好的策略是確定那些內(nèi)容最熱門,大量的復(fù)制(特別是圖片)并針對(duì)這些內(nèi)容先部署緩存。
  如何讓頁(yè)面通過緩存達(dá)到最快相應(yīng)?緩存最好的副本是那些可以長(zhǎng)時(shí)間保持新鮮的內(nèi)容;基于校驗(yàn)雖然有助于加快相應(yīng),但是它不得不和源服務(wù)器聯(lián)系一次去檢查內(nèi)容是否夠新,如果緩存服務(wù)器上就知道內(nèi)容是新的,內(nèi)容就可以直接相應(yīng)返回了。
  我理解緩存是好的,但是我不得不統(tǒng)計(jì)多少人訪問了我的網(wǎng)站!如果你必須知道每次頁(yè)面訪問的,選擇【一】個(gè)頁(yè)面上的小元素,或者頁(yè)面本身,通過適當(dāng)?shù)念^信息讓其不可緩存,例如: 可以在每個(gè)頁(yè)面上部署一個(gè)1x1像素的透明圖片。Referer頭信息會(huì)有包含這個(gè)圖片的每個(gè)頁(yè)面信息;
  明確一點(diǎn):這個(gè)并不會(huì)給你一個(gè)關(guān)于你用戶精確度很高的統(tǒng)計(jì),而且這對(duì)互聯(lián)網(wǎng)和你的用戶這都不太好,消耗了額外的帶寬,強(qiáng)迫用戶去訪問無(wú)法緩存的內(nèi)容。了解更多信息,參考訪問統(tǒng)計(jì)資料。
  我如何能看到HTTP頭信息的內(nèi)容?很多瀏覽器在頁(yè)面屬性或類似界面中可以讓你看到Expires 和Last-Modified信息;如果有的話:你會(huì)找到頁(yè)面信息的菜單和頁(yè)面相關(guān)的文件(如圖片),并且包含他們的詳細(xì)信息;
  看到完整的頭信息,你可以用telnet手工連接到Web服務(wù)器;
  為此:你可能需要用一個(gè)字段指定端口(缺省是80),或者鏈接到www.example.com:80 或者 www.example.com 80(注意是空格),更多設(shè)置請(qǐng)參考一下telnet客戶端的文檔;
  打開網(wǎng)站鏈接:請(qǐng)求一個(gè)查看鏈接,如果你想看到http://www.example.com/foo.html 連接到www.example.com的80端口后,鍵入:
  GET /foo.html HTTP/1.1 [回車]
  GET /foo.html HTTP/1.1 [return]
  Host: www.example.com [回車][回車]
  Host: www.example.com [return][return]
  在[回車]處按鍵盤的回車鍵;在最后,要按2次回車,然后,就會(huì)輸出頭信息及完整頁(yè)面,如果只想看頭信息,將GET換成HEAD。
  我的頁(yè)面是密碼保護(hù)的,代理緩存服務(wù)器如何處理他們?缺省的,網(wǎng)頁(yè)被HTTP認(rèn)證保護(hù)的都是私密內(nèi)容,它們不會(huì)被任何共享緩存保留。但是,你可以通過設(shè)置Cache-Control: public讓認(rèn)證頁(yè)面可緩存,HTTP 1.1標(biāo)準(zhǔn)兼容的緩存服務(wù)器會(huì)認(rèn)出它們可緩存。
  如果你認(rèn)為這些可緩存的頁(yè)面,但是需要每個(gè)用戶認(rèn)證后才能看,可以組合使用Cache-Control: public和no-cache頭信息,高速緩存必須在提供副本之前,將將新客戶的認(rèn)證信息提交給源服務(wù)器。設(shè)置就是這樣:
  Cache-Control: public, no-cache
  無(wú)論如何:這是減少認(rèn)證請(qǐng)求的最好方法,例如: 你的圖片是不機(jī)密的,將它們部署在另外一個(gè)目錄,并對(duì)此配置服務(wù)器不強(qiáng)制認(rèn)證。這樣,那些圖片會(huì)缺省都緩存。
  我們是否要擔(dān)心用戶通過cache訪問我的站點(diǎn)?代理服務(wù)器上SSL頁(yè)面不會(huì)被緩存(不推薦被緩存),所以你不必為此擔(dān)心。但是,由于緩存保存了非SSL請(qǐng)求和從他們抓取的URL,你要意識(shí)到?jīng)]有安全保護(hù)的網(wǎng)站,可能被不道德的管理員可能搜集用戶隱私,特別是通過URL。
  實(shí)際上,位于服務(wù)器和客戶端之間的管理員可以搜集這類信息。特別是通過CGI腳本在通過URL傳遞用戶名和密碼的時(shí)候會(huì)有很大問題;這對(duì)泄露用戶名和密碼是一個(gè)很大的漏洞;
  如果你初步懂得互聯(lián)網(wǎng)的安全機(jī)制,你不會(huì)對(duì)緩存服務(wù)器有任何。
  我在尋找一個(gè)包含在Web發(fā)布系統(tǒng)解決方案,那些是比較有緩存意識(shí)的系統(tǒng)?這很難說,一般說來(lái)系統(tǒng)越復(fù)雜越難緩存。最差就是全動(dòng)態(tài)發(fā)布并不提供校驗(yàn)參數(shù);你無(wú)發(fā)緩存任何內(nèi)容。可以向系統(tǒng)提供商的技術(shù)人員了解一下,并參考后面的實(shí)現(xiàn)說明。
  我的圖片設(shè)置了1個(gè)月后過期,但是我現(xiàn)在需要現(xiàn)在更新。過期時(shí)間是繞不過去的,除非緩存(瀏覽器或者代理服務(wù)器)空間不足才會(huì)刪除副本,緩存副本在過期之間會(huì)被一直使用。
  最好的辦法是改變它們的鏈接,這樣,新的副本將會(huì)從源服務(wù)器上重新下載。記。阂盟鼈兊捻(yè)面本身也會(huì)被緩存。因此,使用靜態(tài)圖片和類似內(nèi)容是很容易緩存的,而引用他們的HTML頁(yè)面則要保持非常更新;
  如果你希望對(duì)指定的緩存服務(wù)器重新載入一個(gè)副本,你可以強(qiáng)制使用“刷新”(在FireFox中在reload的時(shí)候按住shift鍵:就會(huì)有前面提到惡Pragma: no-cache頭信息發(fā)出);蛘吣憧梢宰尵彺娴墓芾韱T從他們的界面中刪除相應(yīng)內(nèi)容;
  我運(yùn)行一個(gè)Web托管服務(wù),如何讓我的用戶發(fā)布緩存友好的網(wǎng)頁(yè)?如果你使用apahe,可以考慮允許他們使用.htaccess文件并提供相應(yīng)的文檔;
  另外一方面: 你也可以考慮在各種虛擬主機(jī)上建立各種緩存策略。例如: 你可以設(shè)置一個(gè)目錄 /cache-1m 專門用于存放訪問1個(gè)月的訪問,另外一個(gè) /no-cache目錄則被用提供不可存儲(chǔ)副本的服務(wù)。
  無(wú)論如何:對(duì)于大量用戶訪問還是應(yīng)該用緩存。對(duì)于大網(wǎng)站,這方面的節(jié)約很明顯(帶寬和服務(wù)器負(fù)載);
  我標(biāo)記了一些網(wǎng)頁(yè)是可緩存的,但是瀏覽器仍然每次發(fā)送請(qǐng)求給服務(wù)。如何強(qiáng)制他們保存副本?緩存服務(wù)器并不會(huì)總保存副本并重用副本;他們只是在特定情況下會(huì)不保存并使用副本。所有的緩存服務(wù)器都回基于文件的大小,類型(例如:圖片 頁(yè)面),或者服務(wù)器空間的剩余來(lái)確定如何緩存。你的頁(yè)面相比更熱門或者更大的文件相比,并不值得緩存。
  所以有些緩存服務(wù)器允許管理員根據(jù)文件類型確定緩存副本的優(yōu)先級(jí),允許某些副本被永久緩存并長(zhǎng)期有效;
  緩存機(jī)制的實(shí)現(xiàn) - Web服務(wù)器端配置一般說來(lái),應(yīng)該選擇最新版本的Web服務(wù)器程序來(lái)部署。不僅因?yàn)樗鼈儼嗬诰彺娴墓δ,新版本往往在性能和安全性方面都有很多的改善?/span>
  Apache HTTP服務(wù)器Apache有些可選的模塊來(lái)包含這些頭信息: 包括Expires和Cache-Control。 這些模塊在1.2版本以上都支持;
  這些模塊需要和apache一起編譯;雖然他們已經(jīng)包含在發(fā)布版本中,但缺省并沒有啟用。為了確定相應(yīng)模塊已經(jīng)被啟用:找到httpd程序并運(yùn)行httpd -l 它會(huì)列出可用的模塊,我們需要用的模塊是mod_expires和mod_headers
  如果這些模塊不可用,你需要聯(lián)系管理員,重新編譯并包含這些模塊。這些模塊有時(shí)候通過配置文件中把注釋掉的配置啟用,或者在編譯的時(shí)候增加-enable -module=expires和-enable-module=headers選項(xiàng)(在apache 1.3和以上版本)。 參考Apache發(fā)布版中的INSTALL文件;
  Apache一旦啟用了相應(yīng)的模塊,你就可以在.htaccess文件或者在服務(wù)器的access.conf文件中通過mod_expires設(shè)置副本什 么時(shí)候過期。你可設(shè)置過期從訪問時(shí)間或文件修改時(shí)間開始計(jì)算,并且應(yīng)用到某種文件類型上或缺省設(shè)置,參考模塊的文檔獲得更多信息,或者遇到問題的時(shí)候向你身邊的apache專家討教。
  應(yīng)用Cache-Control頭信息,你需要使用mod_headers,它將允許你設(shè)置任意的HTTP頭信息,參考mod_headers的文檔可以獲得更多資料;
  這里有個(gè)例子說明如何使用頭信息:
  .htaccess文件允許web發(fā)布者使用命令只在配置文件中用到的命令。他影響到所在目錄及其子目錄;問一下你的服務(wù)器管理員確認(rèn)這個(gè)功能是否啟用了。
  ### 啟用 mod_expires
  ExpiresActive On
  ### 設(shè)置 .gif 在被訪問過后1個(gè)月過期。
  ExpiresByType image/gif A2592000
  ### 其他文件設(shè)置為最后修改時(shí)間1天后過期
  ### (用了另外的語(yǔ)法)
  ExpiresDefault "modification plus 1 day"
  ### 在index.html文件應(yīng)用 Cache-Control頭屬性
  
  Header append Cache-Control "public, must-revalidate"
  
  注意: 在適當(dāng)情況下mod_expires會(huì)自動(dòng)計(jì)算并插入Cache-Control:max-age 頭信息
  Apache 2.0的配置和1.3類似,更多信息可以參考2.0的mod_expires和mod_headers文檔;
  Microsoft IIS服務(wù)器Microsoft的IIS可以非常容易的設(shè)置頭信息,注意:這只針對(duì)IIS 4.0服務(wù)器,并且只能在NT服務(wù)器上運(yùn)行。
  為網(wǎng)站的一個(gè)區(qū)域設(shè)置頭信息,先要到管理員工具界面中,然后設(shè)置屬性。選擇HTTP Header選單,你會(huì)看到2個(gè)有趣的區(qū)域:?jiǎn)⒂脙?nèi)容過期和定制HTTP頭信息。頭一個(gè)設(shè)置會(huì)自動(dòng)配置,第二個(gè)可以用于設(shè)置Cache-Control頭信息;
  設(shè)置asp頁(yè)面的頭信息可以參考后面的ASP章節(jié),也可以通過ISAPI模塊設(shè)置頭信息,細(xì)節(jié)請(qǐng)參考MSDN。
  Netscape/iPlanet企業(yè)服務(wù)器3.6版本以后,Netscape/iPlanet已經(jīng)不能設(shè)置Expires頭信息了,他從3.0版本開始支持HTTP 1.1的功能。這意味著HTTP 1.1的緩存(代理服務(wù)器/瀏覽器)優(yōu)勢(shì)都可以通過你對(duì)Cache-Control設(shè)置來(lái)獲得。
  使用Cache-Control頭信息,在管理服務(wù)器上選擇內(nèi)容管理|緩存設(shè)置目錄。然后:使用資源選擇器,選擇你希望設(shè)置頭信息的目錄。設(shè)置完頭信息后,點(diǎn)擊“OK”。更多信息請(qǐng)參考Netscape/iPlanet企業(yè)服務(wù)器的手冊(cè)。
  緩存機(jī)制的實(shí)現(xiàn):服務(wù)器端腳本需要注意的一點(diǎn)是:也許服務(wù)器設(shè)置HTTP頭信息比腳本語(yǔ)言更容易,但是兩者你都應(yīng)該使用。
  因?yàn)榉⻊?wù)器端的腳本主要是為了動(dòng)態(tài)內(nèi)容,他本身不產(chǎn)生可緩存的文件頁(yè)面,即使內(nèi)容實(shí)際是可以緩存的。如果你的內(nèi)容經(jīng)常改變,但是不是每次頁(yè)面請(qǐng)求都改變, 考慮設(shè)置一個(gè)Cache-Control: max-age頭信息;大部分用戶會(huì)在短時(shí)間內(nèi)多次訪問同一頁(yè)面。例如: 用戶點(diǎn)擊“后退”按鈕,即使沒有新內(nèi)容,他們?nèi)匀灰俅螐姆⻊?wù)器下載內(nèi)容查看。
  CGI程序CGI腳本是生成內(nèi)容最流行的方式之一,你可以很容易在發(fā)送內(nèi)容之前的擴(kuò)展HTTP頭信息;大部分CGI實(shí)現(xiàn)都需要你寫 Content-Type頭信息,例如這個(gè)Perl腳本:
  #!/usr/bin/perl
  print "Content-type: text/html\n";
  print "Expires: Thu, 29 Oct 1998 17:04:19 GMT\n";
  print "\n";
  ### 后面是內(nèi)容體...
  由于都是文本,你可以很容易通過內(nèi)置函數(shù)生成Expires和其他日期相關(guān)的頭信息。如果你使用Cache-Control: max-age;會(huì)更簡(jiǎn)單;
  print "Cache-Control: max-age=600\n";
  這樣腳本可以在被請(qǐng)求后緩存10分鐘;這樣用戶如果按“后退”按鈕,他們不會(huì)重新提交請(qǐng)求;
  CGI的規(guī)范同時(shí)也允許客戶端發(fā)送頭信息,每個(gè)頭信息都有一個(gè)‘HTTP_’的前綴;這樣如果一個(gè)客戶端發(fā)送一個(gè)If-Modified-Since請(qǐng)求,就是這樣的:
  HTTP_IF_MODIFIED_SINCE = Fri, 30 Oct 1998 14:19:41 GMT
  參考一下cgi_buffer庫(kù),一個(gè)自動(dòng)處理ETag的生成和校驗(yàn)的庫(kù),生成Content-Length屬性和對(duì)內(nèi)容進(jìn)行g(shù)zip壓縮。在Python腳本中也只需加入一行;
  服務(wù)器端包含 Server Side IncludesSSI(經(jīng)常使用.shtml擴(kuò)展名)是網(wǎng)站發(fā)布者最早可以生成動(dòng)態(tài)內(nèi)容的方案。通過在頁(yè)面中設(shè)置特別的標(biāo)記,也成為一種嵌入HTML的腳本;
  大部分SSI的實(shí)現(xiàn)無(wú)法設(shè)置校驗(yàn)器,于是無(wú)法緩存。但是Apache可以通過對(duì)特定文件的組執(zhí)行權(quán)限設(shè)置實(shí)現(xiàn)允許用戶設(shè)置那種SSI可以被緩存;結(jié)合XbitHack調(diào)整整個(gè)目錄。更多文檔請(qǐng)參考mod_include文檔。
  PHPPHP是一個(gè)內(nèi)建在web服務(wù)器中的服務(wù)器端腳本語(yǔ)言,當(dāng)做為HTML嵌入式腳本,很像SSI,但是有更多的選項(xiàng),PHP可以在各種Web服務(wù)器上設(shè)置為CGI模式運(yùn)行,或者做為Apache的模塊;
  缺省PHP生成副本沒有設(shè)置校驗(yàn)器,于是也無(wú)法緩存,但是開發(fā)者可以通過Header()函數(shù)來(lái)生成HTTP的頭信息;
  例如:以下代碼會(huì)生成一個(gè)Cache-Control頭信息,并設(shè)置為3天以后過期的Expires頭信息;
   公司位置建站幫助
備案系統(tǒng)認(rèn)證 舉報(bào)不良網(wǎng)站 我們的支付方式 AAA級(jí)信用
廣州萬(wàn)戶網(wǎng)絡(luò)信息科技有限公司 旗下網(wǎng)站建設(shè)品牌:萬(wàn)戶網(wǎng) www.famouscelebritydeaths.com 版權(quán)所有 ©2000-2019 All Rights Reserved
網(wǎng)站備案編號(hào):粵ICP備15049595號(hào) 地址:廣州市番禺區(qū)大石街北聯(lián)圍仔工業(yè)路2號(hào)E座305
電話:020-85421558   傳真:020-88140140   郵編:510515