1. 程式人生 > >【CDN 最佳實踐】CDN快取策略解讀和配置策略

【CDN 最佳實踐】CDN快取策略解讀和配置策略

摘要: CDN 作為內容分發網路主要是將資源快取在 CDN 節點上,然後後續訪問即可直接通過 CDN 節點將資源返回給客戶端,而不再需要回到源站伺服器以加快請求速度。那麼 CDN 到底對於哪些請求加速呢?其快取規則和快取時間是怎麼樣的呢?怎麼樣的快取規則更加合理呢?本文就對 CDN 的快取規則解讀。

CDN 的快取適用範圍

CDN 對於常見的 HTTP 請求均是支援的,具體對不同請求方式的支援情況請參考表一。但是有一點需要注意的是雖然對這些型別的 HTTP 請求均是支援的,但是並不是對所有請求方式都會進行快取的。 CDN 僅會對於 GET 請求進行快取,而對於其他的請求均不進行快取,僅是起到中間代理、轉發的功能。因此我們建議新增 CDN 的站點源站最好能夠實現動靜分離。將動態請求和靜態請求的內容獨立成兩個站點,而 CDN 僅僅加速靜態站點中的資源。

表一. CDN 對 HTTP 請求支援情況

注意

1. CDN 處理 HEAD 請求時會將 HEAD 請求轉換成 GET 請求回源,因此源站日誌中記錄的是 GET 請求。

2. CDN 僅支援 POST 和 PUT 方式傳送帶有請求體(BODY)的 HTTP 請求。

CDN快取配置

CDN 的快取配置截圖如圖 1 所示。快取配置包括目錄和字尾名兩種形式,並且可以針對不同的快取配置設定不同的權重以決定其優先順序。其中字尾名即是針對於特定字尾名設定的快取規則,而目錄則是對該目錄及其子目錄下的所有檔案均生效的。當對同一檔案同時設定了字尾名和目錄的快取的話會先依據優先順序權值先進行選擇,在優先順序權值相同的情況下會後綴名策略優先。

圖 1. CDN 快取配置示意圖

CDN 快取規則

總體而言,CDN 所有的快取規則均可以按照圖 2 中所表述的內容進行判斷。下面我們對圖 2 中的詳細內容資訊解讀。

圖 2. CDN 快取規則示意圖

1. CDN 處理一個資源是否快取首先是需要看源站針對於該資源配置的快取設定。因為源站的不快取策略是使用者自身控制的,因此是有最高的優先順序的,當源站配置了快取規則則轉 2 。而如果沒有進行任何配置的話則轉 3 ,而對於瀏覽器快取情況轉 7 。

2. 當源站配置了以下的規則時, CDN 會認為該資源源站不允許 CDN 快取,並且這種情況下瀏覽器也是不會做快取的,因此會每次請求該資源時都回源站,無法進行快取加速,如果沒有則轉 4 :

1)有s-maxage=0,no-cache,no-store,private其中一種

2)如果沒有s-maxage或者s-maxage=0,並且有max-age=0.

3)帶Pragma: no-cache

3. 在源站沒有配置快取規則需判斷 CDN 控制檯是否配置快取規則,如果配置了快取規則轉 4 ,如果沒有配置快取規則轉 5 。

4. 需判斷 CDN 控制檯是否有配置快取規則,如果配置了快取規則的話那麼

CDN 上的快取策略將覆蓋源站的快取策略,而控制檯快取配置的優先順序為:

1)權重越高的優先順序越好;

2)同等優先順序字尾名優先順序高於目錄優先順序;

3)相同權重且相同優先順序則隨機匹配(建議避免第三種場景),如果沒有配置快取規則則轉 6 。

5. 需根據源站的快取規則進行快取,常見的源站快取規則有 Cache-Control和 Expires 頭,根據 HTTP 協議 Cache-Control 的優先順序高於 Expires 頭,並且 s-maxage 設定高於 max-age 設定。

6. 需遵循 CDN 預設快取規則,預設快取規則包括:

1)對於 response 頭沒有包括 Etag 或者 Last-Modified 頭的檔案預設是不快取的(一般認為此類檔案為動態檔案);

2)沒有 Last-Modified 頭的檔案預設但是有 Etag 頭的快取 10 秒;

3)對於有 Last-Modified 頭的會按照(當前時間 - Last-Modified 時間) * 0.1,並且將其限制在 [10,3600] 區間內。

7. 對於源站設定了不快取的規則時瀏覽器是不快取的;如果 CDN 修改了 Cache-Control 或者 Expires 頭時,瀏覽器會按照該修改頭快取;如果沒有修改即會按照源站的策略快取。

CDN 快取情況檢視

常見通過 HTTP 的響應頭檢視具體 CDN 的快取情況,如圖 3 即是常見的通過 CDN 訪問的響應頭,可以根據 X-Cache 檢視當前該資源是否有在 CDN的 L1 節點快取,而檢視 L2 節點的快取情況則需要根據 Via 頭中的第一部分檢視,如果是 M 即是 MISS,沒有命中的狀態;而出現 H 即是命中快取。X-Swift-SaveTime 表示該資源快取到 CDN 節點上的 GMT 時間(相比於北京時間晚8小時);而 X-Swift-CacheTime 表示該資源在 CDN 節點上快取多長時間會過期。

圖 3. CDN 快取情況示意圖

作者:燁爍

相關推薦

CDN 最佳實踐CDN快取策略解讀配置策略

摘要: CDN 作為內容分發網路主要是將資源快取在 CDN 節點上,然後後續訪問即可直接通過 CDN 節點將資源返回給客戶端,而不再需要回到源站伺服器以加快請求速度。那麼 CDN 到底對於哪些請求加速呢?其快取規則和快取時間是怎麼樣的呢?怎麼樣的快取規則更加合理呢?本文就

OSS最佳實踐WEB站點中如何應用OSS產品

put discuz論壇 瓶頸 個人 得到 行為 ssim 雲安全 實現 【OSS最佳實踐】WEB站點中如何應用OSS產品http://www.bieryun.com/1194.htmlOSS提供了海量、安全、低成本、高可靠的雲存儲服務,用戶可以通過SDK、API、OSS相

taro最佳實踐設定好基礎開發字型尺寸

設定開發字型尺寸 我感覺在一個專案當中,務必一開始就設定好這個尺寸,關係後今後專案的一個統一管理問題。那麼應該怎麼設定這個呢? 設計思路 按照慣例,我們開發專案的時候,儘量不要為難自己,如果按照2倍圖,來開發的話,處處想著2倍,在開發的過程中,想參考其它專案的樣式

ECS最佳實踐基於多塊雲盤構建LVM邏輯卷

一、LVM簡介   LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁碟分割

上海雲棲:金融政企行業的CDN最佳實踐

智能路由 授權 使用 影響 解決 第一次 比較 oschina 高可用性 摘要: 在剛剛結束的上海雲棲大會飛天技術匯分論壇上,阿裏雲視頻雲產品架構師羅小飛進行了《阿裏雲CDN——面向金融政企的CDN最佳實踐》主題分享,為上海的嘉賓介紹CDN的解決方案與技術服務體系。在剛剛結

最佳實踐微信小程式客服訊息實時通知如何快速低成本實現?

我們做微信小程式開發的都知道,只要在小程式頁面中新增如下程式碼即可進入小程式的客服會話介面: <button open-type="contact" >聯絡我們</button> 微信小程式客服會話介面如下圖所示:

最佳實踐如何限制使用者僅通過HTTPS方式訪問OSS?

一、當前存在的問題   當前OSS支援使用者使用HTTPS/HTTP協議訪問Bucket。但由於HTTP存在安全漏洞。大型企業客戶都要求使用HTTPS方式訪問OSS,並且拒絕HTTP訪問請求。   目前OSS可以通過RAM policy方式實現:限制某個使用者、角色

最佳實踐如何優雅的進行重試

本文口味:冰鎮楊梅 預計閱讀:20分鐘 說明 最近公司在搞活動,需要依賴一個第三方介面,測試階段並沒有什麼異常狀況,但上線後發現依賴的介面有時候會因為內部錯誤而返回系統異常,雖然概率不大,但總因為這個而報警總是不好的,何況死信佇列的訊息還需要麻煩運維進行重新投遞,所以加上重試機制勢在必行。 重試機制可以保護系

Qt入門實踐Qt之哲學家問題(linux 多線程)

avi .cpp private 1=1 endif debug 問題 tel pub 轉載請註明出處:http://blog.csdn.net/feng1790291543 linux多線程實現哲學家問題,依據哲學家吃飯、拿筷子、放下筷子...... 首先,主

c++工程實踐智能指針

現在 app apt cycle cpp adr RM 設計 HA 一、智能指針簡介 a smart pointer is an abstract data type that simulates a pointer while providing added featur

軟工實踐團隊展示

算法 本科生 作業 我們 技術分享 研究 homework 堅持 ring1 軟工實踐團隊展示——WorldElite 本次作業鏈接 團隊成員 031602636許舒玲(組長) 031602237吳傑婷 031602634吳誌鴻 081600107傅濱 031602220雷

軟工實踐團隊第一次作業

style 開發 需求分析 項目管理 代碼 參考資料 個人主頁 參考 tps 作業要求(本次作業總分20分) 詳細要求 在github中創建一個團隊項目。(1分) 在github的wiki中,介紹一下團隊,包括以下信息: 團隊名稱(1分) 團隊成員介紹(學號,姓名或

踩坑+實踐elementui 中關於tab標籤echart width100%顯示不完全的問題

轉載:https://blog.csdn.net/izengjing/article/details/83539426   問題描述 關於elementui 中tab標籤echart顯示不完全的問題, 在通過tab顯示echart的時候,容器寬度width:

讀書筆記推薦系統實踐

第一章 好的推薦系統 什麼是推薦系統? 在資訊過載的時代,無論是資訊生產者還是資訊消費者都很難獲得有用的資訊。前者,需要把自己好的東西推廣出去,後者需要找到自己需,要但自己所不知道的東西。 為了解決資訊過載的問題,人類已經提出了很多解決方案,其中具有代表性有分類目錄和搜尋引擎。分別催生了雅虎和

Taro全實踐修改radio元件的大小

需求是將radio選中後顏色改為橙色、大小改成合適大小。 1、改顏色 <Radio color='#FF7464'></Radio> 2、改大小 <Radio style={{transform:'scale(0.8)'}} color='#FF74

Taro全實踐Taro在微信小程式中的生命週期

一、Taro的本身生命週期 生命週期componentWillMount在微信小程式中這一生命週期方法對應頁面的onLoad或入口檔案app中的onLaunch componentDidMount在微信小程式中這一生命週期方法對應頁面的onReady或入口檔案app中的onLaunch,在 compone

HBase最佳實踐-HBase中的寫效能優化策略

  2016年12月10日 14:37:03 ourpush 閱讀數:1452   上一篇文章主要介紹了HBase讀效能優化的基本套路,本篇文章來說道說道如何診斷HBase寫資料的異常問題以及優化寫效能。和讀相比,HBase寫資料流程倒是顯得很簡單

FB官方活動Facebook X Appsflyer休閒遊戲投放策略+ AppsFlyer應用事件追蹤全解析

10月25日(週四) 下午 3:00 - 4:00 這次我們邀請到了Facebook大中華區客戶經理來剖析休閒遊戲市場機遇,並且手把手從受眾定位、素材、排期和優化全盤解析如何制定休閒遊戲FB投放策略。另外我們還邀請到了Appsflyer的 大中華區客戶經理來跟我

機器學習實踐用Python實現樸素貝葉斯分類器

       閱讀學習了《機器學習》第7章的貝葉斯分類器後,為了加深理解和加強python的程式碼能力,因此嘗試使用Python實現樸素貝葉斯分類器,由於初學Python的緣故,程式碼的一些實現方法可能比較繁瑣,可閱讀性有待提高。程式碼如下: #import numpy a

JavaEE學習筆記Hibernate_04_ORM,Hibernate,主鍵策略,uuid

Hibernate_04 A.模式,層 1.模式與框架 a.模式 是專家總結出來,在某種情況下,解決某類問題的最佳解決方案 是思想、知識 b.框架 是一種半成品軟體,供開發者進行制定,達到簡化開發 是工具 2.四層架構 表現層:Struts2    Spr