http緩衝提高效能

來源:互聯網
上載者:User

標籤:瀏覽器   反向 Proxy   智能dns   開始   Proxy 伺服器   ash   pre   自己   表示   

http緩衝機制

緩衝分為服務端側(server side,比如 Nginx、Apache)和用戶端側(client side,比如 web browser)。

服務端緩衝又分為 Proxy 伺服器緩衝 和 反向 Proxy伺服器緩衝(也叫網關緩衝,比如 Nginx反向 Proxy、Squid等),其實廣泛使用的 CDN 也是一種服務端緩衝,目的都是讓使用者的請求走”捷徑“,並且都是緩衝圖片、檔案等靜態資源。

瀏覽器緩衝控制機制有兩種:HTML Meta標籤 vs. HTTP頭資訊

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

上述代碼的作用是告訴瀏覽器當前頁面不被緩衝,每次訪問都需要去伺服器拉取。使用上很簡單,但只有部分瀏覽器可以支援,而且所有緩衝Proxy 伺服器都不支援,因為代理不解析HTML內容本身。

expires和cache control 都是指明資源的緩衝有效期間,如果有效,就(200 from cache)

  • expires :http1.0,伺服器響應訊息頭欄位,在響應http請求時告訴瀏覽器在到期時間前可以直接從瀏覽器緩衝存取資料(200 from cache),而無需再次請求,現在預設瀏覽器都是預設使用http 1.1,所以它的作用基本忽略。

缺點:返回的到期時間是伺服器端的時間,如果用戶端和伺服器的時間相差很大,誤差就很大。所以,在http 1.1開始,就使用cache-control:max-age 秒替代

<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="Expires" content="Mon, 20 Jul 2009 23:00:00 GMT" />
  • cache-control : http 1.1 ,與expires作用一致,都是指明資源的緩衝有效期間。不過cache-control選擇更多,設定更細緻,如果同時設定的話,優先順序高於expires。

Public指示響應可被任何緩衝區緩衝。

Private指示對於單個使用者的整個或部分響應訊息,不能被共用快取處理。這允許伺服器僅僅描述當使用者的部分響應訊息,此響應訊息對於其他使用者的請求無效。

no-cache指示請求或響應訊息不能緩衝,該選項並不是說可以設定”不緩衝“,容易望文生義~

no-store用於防止重要的資訊被無意的發布。在請求訊息中發送將使得請求和響應訊息都不使用緩衝,完全不存下來。

max-age指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。

min-fresh指示客戶機可以接收回應時間小於目前時間加上指定時間的響應。

max-stale指示客戶機可以接收超出逾時期間的響應訊息。如果指定max-stale訊息的值,那麼客戶機可以接收超出逾時期指定值之內的響應訊息。

last-modified和Etag 判斷之後(304 協商緩衝)

  • last-modified: 指這個響應資源的最後修改時間。

當資源到期時(max-age/expires),發現資源具有Last-Modified聲明,則再次向web伺服器請求時帶上頭 If-Modified-Since,表示請求時間。web伺服器收到請求後發現有頭If-Modified-Since 則與被請求資源的最後修改時間進行比對。若最後修改時間較新,說明資源又被改動過,則響應整片資源內容(寫在響應訊息包體內),HTTP 200;若最後修改時間較舊,說明資源無新修改,則響應HTTP 304 (協商緩衝)。If-Modified-Since能檢查到的粒度是s級的

  • Etag:http 1.1,Last-Modified與ETag一起使用時,伺服器會優先驗證ETag。Etag僅僅是一個和檔案相關的標記,可以是一個版本戳記,比如說v1.0.0或者說"2e681a-6-5d044840"這麼一串看起來 很神秘的編碼。伺服器判斷髮送過來的Etag和計算出來的Etag匹配,因此If-None-Match為False,不返回200,返回304

 

使用者操作行為與緩衝

瀏覽器中的操作對緩衝的影響:

  • 強制重新整理 – 當按下ctrl+F5來重新整理頁面的時候, 瀏覽器將繞過各種緩衝(本機快取和協商緩衝), 直接讓伺服器返回最新的資源;
  • 普通重新整理 – 當按下F5來重新整理頁面的時候,瀏覽器將繞過本地緩蹲來發送請求到伺服器, 此時, 協商緩衝是有效
  • 斷行符號或轉向 – 當在地址欄上輸入斷行符號或者按下跳轉按鈕的時候, 所有緩衝都生效

CDN (Content Delivery Network,內容分髮網絡)

CDN部署靜態內容:指 JavaScript、CSS、圖片、表徵圖、Flash 等,不包括頁面html。

--CDN是什嗎?

CDN是一組分布在多個不同地理位置的Web伺服器,用於更加有效地向使用者發布內容。在最佳化效能時,

會根據距離的遠近來選擇。

1.將靜態資源緩衝到離使用者很近的相同網路電訊廠商的CDN節點上。

優點:如果應用程式web伺服器離使用者更近,那麼一個http請求的回應時間將縮短,另一方面,如果組件web伺服器離使用者更近,則多個http請求的回應時間將縮短

不同地區的使用者會訪問到離自己最近的相同網路線路上的CDN節點,當請求達到CDN節點後,節點會判斷自己的內容緩衝是否有效,一個地區內只要有一個使用者先載入資源,在CDN中建立了緩衝,該地區的其他後續使用者都能因此而受益。

不同地區的使用者訪問同一個網域名稱卻能得到不同CDN節點的IP地址,這要依賴於CDN服務商提供的智能網域名稱解析服務,瀏覽器發起網域名稱查詢時,這種智能DNS服務會根據使用者IP計算並返回離它最近的同網路CDN節點IP,引導瀏覽器與此節點建立串連以擷取資源。

2.載入靜態資源使用與頁面不同的網域名稱[不是用獨立的二級或第三層網域名,而是用獨立的頂層網域]

原理:當瀏覽器向伺服器請求一個靜態資源時,會先發送同網域名稱下的 cookie,伺服器對於這些 cookie 不會做任何處理。因此它們只是在毫無意義的消耗頻寬。所以你應該確保對於靜態內容的請求是無coockie的請求。

靜態資源和首頁面不同域,這樣載入資源的http請求就不會帶上首頁面種的cookie等資料,減少了資料轉送量。節省流量,提升上傳效率

3.動靜分離,減少核心伺服器的壓力

4.並發限制

原理:瀏覽器對同一個網域名稱下的請求有並發的限制,(ie6為2個,其他為6個)

設定單獨網域名稱伺服器,可以提升請求並發數,也就是令瀏覽器並行下載更多資源,提高網站效能。

5.方便複用--放在另一個伺服器上,可以方便全域內其他產品的使用。

利於用戶端的緩衝,比如你開啟了taobao.com,緩衝了t.js檔案,那麼再開啟tmall的時候,由於請求的是同一檔案,就不用再下載了

http緩衝提高效能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.