• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Web 開發人員需知的 Web 緩存知識(3)

    發表于:2013-07-30來源:web開發家園作者:sxwgf點擊數: 標簽:緩存
    Expires: Fri, 30 Oct 1998 14:19:41 GMT 顯然,如果你要使用Expires頭,確保你的Web服務器時間的準備就非常重要了。使用網絡時間協議⑥(Network Time Protocol NTP)不失為

      Expires: Fri, 30 Oct 1998 14:19:41 GMT

      顯然,如果你要使用Expires頭,確保你的Web服務器時間的準備就非常重要了。使用網絡時間協議⑥(Network Time Protocol – NTP)不失為一個號方法。如果你的身邊有本地系統管理員,可以向他咨詢,或者查看下面的百科Add 。

      盡管Expires頭很有用,但它有一定的局限性。首先,因為牽扯到時間,Web服務器端的時鐘必須和緩存的同步,否則很可能實現不了預期的結果——緩存把前女友當初現女友,把現女友當作過去式——那就悲劇了。

      另外一個問題是,你很容易忘記給某內容設置了一個特定時間,如果返回內容的時候沒有更新這個過期時間,則每個請求都是上訪到服務器,反而增加了負載和響應時間。

     ?、蘧W絡時間協議(NTP): 以封包交換把兩臺電腦的時鐘同步化的網絡協議。NTP使用UDP端口123作為傳輸層。它是用作抵銷可變延遲的影響。NTP是仍在使用中的最古老的網絡協 議之一(在1985年前開始)。NTP最初由德拉瓦州大學的Dave Mills設計,他與一群志愿者仍在維護NTP。

      Cache-Control(緩存控制)HTTP頭信息

      HTTP 1.1引入了新的頭信息:Cache-Control響應頭信息,讓網站的發布者可以更全面的控制他們的內容,更好地處理Expires的些限制。Cache-Control有用的響應頭包括:

      max-age=[秒]:表示在這個時間范圍內緩存是新鮮的無需更新。類似Expires時間,不過這個時間是相對的,而不是絕對的。也就是某次請求成功后多少秒內緩存是新鮮的。

      s-maxage=[秒]:類似max-age, 除了僅應用于共享緩存(如代理)。

      public:標記認證的響應才能夠被緩存。一般而言,需要認證HTTP請求內容會自動私有化(不會被緩存Add)。

      privateN:允許緩存專門為某一個用戶存儲響應,比方說在瀏覽器中;共享緩存一般不會,例如在代理中。

      no-cache:每次在釋放緩存副本之前都強制發送請求給源服務器進行驗證,這在確保認證有效性上很管用(和public結合使用)或者保證內容必須是即時的,不得無視緩存的所有優點,如國內的微博、twitter等的刷新顯示Add。

      no-store:強制緩存在任何情況下都不要保留任何副本。

      must-revalidate:告訴緩存,我給你準備了一些關于新鮮度的信息,在表現的時候要嚴格遵循之。HTTP允許緩存在某些特定情況下返回過期數據,指定了這個屬性,相對于告訴緩存,你丫必須嚴格遵循我的規則。

      proxy-revalidate:類似must-revalidate,除了只能應用于代理緩存。

      舉個板栗:

      Cache-Control: max-age=3600, must-revalidate

      如果Cache-Control和Expires同時存在,Cache-Control說了算N。如果你打算使用Cache-Control頭,你應該好好看看”HTTP 1.1 規范“, 詳見參考文章以及拓展閱讀。

      驗證器和驗證

      在緩存如何工作這段譯文中,我們說過,服務器以及緩存通過驗證來判斷內容是否改變,在不確定內容是否過期的時候,可以避免本地已經存在副本的時候下載整個內容。

      驗證器是很重要的,如果一個都沒有,同時沒有可用的新鮮度信息(Expires或Cache-Control),緩存一點兒都不會存儲內容。

      最常見的驗證是通過Last-Modified頭信息通信確定文檔最后的修改時間,如果緩存有內容存儲,會包含Last-Modified信息的,輔助If-Modified-Since請求,我們可以詢問服務器內容是否改變了。

      HTTP 1.1引入了一個新的驗證器,稱為Etag⑦. Etag是每次展現內容改變時候由服務器生成的唯一標識符,由于服務器控制ETag如何生成,當緩存發起If-None-Match請求的時候,如果Etag匹配,就可以確定展示內容其實是一樣的。

     ?、逧tag: HTTP協議規格說明定義ETag為”被請求變量的實體值”。另一種說法是,ETag是一個可以與Web資源關聯的記號(token)。典型的Web資源 可以一個Web頁,但也可能是JSON或XML文檔。服務器單獨負責判斷記號是什么及其含義,并在HTTP響應頭中將其傳送到客戶端,以下是服務器端返回 的格式:ETag:”50b1c1d4f775c61:df3″客戶端的查詢更新格式是這樣的:If-None-Match : W / “50b1c1d4f775c61:df3″如果ETag沒改變,則返回狀態304然后不返回,這也和Last-Modified一樣。測試Etag主要 在斷點下載時比較有用。

      幾乎所有的緩存使用Last-Modified時間作為驗證器,Etag驗證也開始變得流行。

      所有新一代的Web服務器都對靜態內容(如:文件)自動生成ETag和Last-Modified頭信息,而你不必做任何設置。但是,服務器對于動態內容(例如:CGI, ASP或數據庫生成的網站)并不知道如何生成這些信息,參考一下編寫支持緩存的腳本章節;

      創建支持緩存網站的小技巧

      除了使用新鮮度信息以及驗證,還有其他一些技巧可以讓你網站的緩存更加友好:

      保持URL穩定:這是緩存的金科玉律,如果你為不同頁面,不同用戶或不同網站提供相同的內容,他們應該使用相同的URL. 這是簡單卻非常行之有效的方法。例如,你的HTML中的某個引用地址是"/index.html", 則要一直使用這個地址。

      不同地方的圖片和其他元素使用同一庫。

      對于不經常改變的圖片/頁面啟用緩存,通過將Cache-Control: max-age頭信息的值設大一點。

      對于定期更新的內容通過指定max-age或過期時間實現緩存。

      如果資源改變了(尤其下載文件),改變其名字。由于一般這種資源會有很長的過期時間,而服務器上一直是正確的版本;因此,鏈接這個下載資源的頁面需要要比較短的過期時間(//zxx: 我司頁面5分鐘過期)。否則,會出現服務器的資源是新的,但頁面被緩存了,其中的鏈接地址還是舊的,就會出現新舊版本沖突的可能Add。

      萬不得已不要變動文件:否則你要設置一個新的Last-Modified值。另外,當你更新站點的時候,只要上傳改動的那些文件,而不要把整個站點都覆蓋過去。

      Cookie能不用就不用:Cookie難以被緩存,且大多情境下是沒有必要的。如果你非得使用Cookie,建議用在動態頁面上。

    原文轉自:http://web.itivy.com/article-805-1.html

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>