標籤:瀏覽器 反向 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緩衝提高效能