cdn
即內容分發網路content delivery network
,cdn
的基本原理是廣泛採用各種快取伺服器,將這些快取伺服器分布到使用者訪問相對集中的地區或網路中,在使用者訪問**時,利用全域性負載技術將使用者的訪問指向距離最近的工作正常的快取伺服器上,由快取伺服器直接響應使用者請求,cdn
的基本思路是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定,通過在網路各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層虛擬網路,cdn
系統能夠實時地根據網路流量和各節點的連線、負載狀況以及到使用者的距離和響應時間等綜合資訊將使用者的請求重新導向離使用者最近的服務節點上,其目的是使使用者可就近取得所需內容,解決internet
網路擁擠的狀況,提高使用者訪問**的響應速度。
使用cdn
服務提供商的cdn
服務時,需要做一些配置:
簡單的cdn
的訪問流程,這是一種pull
的方式拉取快取:
在計算機中有兩大難題,一是快取何時失效,二是如何命名,而cdn
中快取何時失效是乙個比較麻煩的問題,假如源站的資源檔案發生變化,而使用者此時取得的資源是從快取節點中取得的,此時就會造成資源檔案不一致的現象,解決這個問題可以通過主動push
重新整理所有cdn
快取的方式來實現,但是這種方式成本較高,比較簡單的解決方案就是在固定時間段過後便使快取失效,除了節點的快取需要控制,還需要控制使用者本地快取,在http
協議中提供了如下快取控制的方式:
強快取是通過expires
與cache-control
來控制快取在本地的有效期。
expires
expires
是http 1.0
提出的乙個表示資源過期時間的header
,它描述的是乙個絕對時間,由伺服器返回。expires
受限於本地時間,如果修改了本地時間,可能會造成快取失效.對於資源的請求,如果在expires
之內,則瀏覽器會直接讀取快取,不再請求伺服器。
expires: sun, 14 jun 2020 02:50:57 gmt
cache-control
cache-control
出現於http 1.1
,優先順序高於expires
,表示的是相對時間,請求頭和響應頭都支援這個屬性,通過它提供的不同的值來定義快取策略。
cache-control: max-age=300
cache-control: no-cache
: 快取中會儲存服務端響應的內容,只是在與服務端進行新鮮度再驗證之前,該快取不能夠提供給瀏覽器使用。簡單來說,就是瀏覽器會將服務端響應的資源進行快取,但是在每次請求時,快取都要向服務端評估快取響應的有效性,協商快取是否可用,根據響應是304
還是200
判斷是使用本地快取資源還是使用伺服器響應的資源。
cache-control: public || private
:public
表示該響應可以被任何中間人比如中間**、cdn
等快取。預設響應為private
,private
表示該響應是專用的,中間人不能快取此響應,該響應只能應用於瀏覽器私有快取中。
cache-control: max-age=31536000
: 響應為最大的過期時間,其指令是max-age=
,表示資源能夠被快取即保持新鮮的最大時間,max-age
是距離請求發起的時間的秒數。
cache-control: must-revalidate
: 當使用了must-revalidate
指令,那就意味著快取在考慮使用乙個陳舊的資源時,必須先驗證它的狀態,已過期的快取將不被使用。在正常情況下是沒有必要使用這個指令的,因為在強快取過期的情況下會進行協商快取,但是http
規範是允許客戶端在某些特殊情況下直接使用過期快取的,比如校驗請求傳送失敗的時候,還比如有配置一些特殊指令stale-while-revalidate
、stale-if-error
等的時候,must-revalidate
指令就是讓快取在過期後的任何情況下都必須重新驗證。
當瀏覽器對某個資源的請求沒有命中強快取,就會發乙個請求到伺服器,驗證協商快取是否命中,如果協商快取命中,請求響應返回的http
狀態為304 (not modified)
,該請求不攜帶實體資料,若未命中,則返回200
並攜帶資源實體資料。協商快取是利用的是last-modified,if-modified-since
和etag、if-none-match
這兩對header
來管理的。
last-modified if-modified-since
last-modified,if-modified-since
是http 1.0
引入的,last-modified
表示本地檔案最後修改日期,瀏覽器會在請求頭加上if-modified-since
即上次響應的last-modified
的值,詢問伺服器在該日期後資源是否有更新,有更新的話就會將新的資源傳送回來,但是如果在本地開啟快取檔案,就會造成last-modified
被修改,所以在http 1.1
出現了etag
。
etag if-none-match
etag
就像乙個指紋,資源變化都會導致etag
變化,跟最後修改時間沒有關係,etag
可以保證每乙個資源是唯一的,if-none-match
的請求頭字段會將上次返回的etag
傳送給伺服器,詢問該資源的etag
是否有更新,有變動就會傳送新的資源回來。etag
的優先順序比last-modified
更高,具體使用etag
主要出於下面幾種情況考慮:
快取之CDN快取
對於一些使用者訪問量巨大的 而言,如果所有使用者都去伺服器請求資料,伺服器會很快崩潰,並且在不同網路以及不同地區的使用者,請求伺服器的速度也不一樣。為了提高這部分使用者的訪問速度,cdn 中又提出了新的網路架構,即建立一些最接近使用者網路的邊緣伺服器,然後將檔案快取在這些邊緣伺服器 節點 上,這就是...
CDN快取小結
首先,cdn可以理解為乙個普通快取,如 快取或者說邊緣快取,即便不關心使用者的具體地理位置,也應該考慮使用cdn的 快取來提高使用者體驗。簡單而言,快取會快取你 的一些頁面,通過快取來傳輸靜態內容非常的快。乙個簡單的例子 假設你有乙個帶有開始頁面的部落格,這裡面列出了所有近期的部落格列表。完成這一過...
CDN快取小結
1.為什麼使用cdn?首先,cdn可以理解為乙個普通快取,如 快取或者說邊緣快取,即便不關心使用者的具體地理位置,也應該考慮使用cdn的 快取來提高使用者體驗。簡單而言,快取會快取你 的一些頁面,通過快取來傳輸靜態內容非常的快。乙個簡單的例子 假設你有乙個帶有開始頁面的部落格,這裡面列出了所有近期的...