由于剛進部門,部門基本每個項目都需要CDN,以前自己對CDN基本沒怎麼了解,但是有一定Web開發的基礎。在學習CDN的過程中,結合自己的經驗,對遇到的幾個問題刨根揪底,好好掰扯掰扯。
首先,借用騰訊雲CDN官網中的一個圖檔,來解釋一下CDN的基本流程和原理,這兩張圖對CDN是什麼解釋的非常清楚。但是CDN學習的過程中又會涉及到很多的概念,會讓初學者很困惑。下面逐個掰扯掰扯。

1)最困惑的莫過于回源host,回源Host怎麼影響使用者的通路和CDN的行為。
2)源站,域名,回源host又是什麼關系。
3)如何進行基本的CDN測試和資訊檢視。
在介紹回源host之前,根據自己的了解,來介紹一下使用者通過域名通路或者下載下傳(基于http協定)的一段主要行為和動作:
如上圖所示,使用者在浏覽器中敲入<code>www.abc.com/xxx?a=b</code>以後,會發生哪些行為,涉及哪些動作,跟我們介紹的CDN有什麼關系,跟騰訊雲上的服務又有哪些關系?
1)首先使用者輸入網址後,按下回車,浏覽器經過核心處理後,會建構http請求(忽略前面的DNS解析過程),以如下http請求為例,可以看到請求的URL,Method,Host,Content-Type等參數。其中Host代表請求的資源真實所在的位置。Host在Htttp協定中是必帶的,否則傳回4xx bad request(參見RFC2616 14.23小節,參考https://www.ietf.org/rfc/rfc2616.txt).
2)使用者将請求發送到對應的遠端Http伺服器上,現在業界用的最常見的是apache,nigx等,apache/nginx服務監聽本機的端口(可配置),接受請求,解析靜态檔案,包括html,連結的css,jpg圖檔,動畫等等。這裡的靜态檔案,我了解CDN加速類型中對應的靜态加速是對他們的加速。舉個簡單的例子,取一個相對簡單的網頁源代碼為例,在html link rel和href甚至script指定的有很多需要加載的靜态資源。
3)同時使用者的部分動态業務請求,例如的jsp,php等代碼會到背景對應的子產品去處理,以我有限的知識,以前我大學時間用的比較多的是tomcat。tomcat基于servlet規範實作,會處理動态請求,例如資料庫操作等等,然後将請求轉發到後端的業務邏輯,甚至資料庫,然後将結果傳回以html傳回給http伺服器->浏覽器。
4)後面的幾步不讨論了,與今天讨論的無關。
今天要讨論回源host,源站,加速域名到底是什麼,剛開始這個概念一直沒搞清楚,看看騰訊雲官網的文檔介紹:
1.先看看回源host是指什麼:
回源host是CDN回源的時候,http請求中host字段指定的位址。那麼Host字段又是幹什麼用的呢?在baidu裡面很多地方說的不清不楚,還是看看Http RFC2616裡面怎麼給出官方的說法:
如上紅框中的說明,Host是指請求到達一個伺服器或者網關(CGI?)後,用來區分内部的多個URL,例如在同一個IP位址根目錄下代表多個host名稱的目錄,具體是指哪一個。
上面說得可能也比較拗口,那我們拿一個具體的遵循http規範的伺服器執行個體來看看到底怎麼回事,以apache為例,如下圖所示,apache的virtualhost配置,可以支援同一個位址下配置多個virtual host,每個都有對應的server name,以及對應的通路目錄。例如如果host為www.example.com,那麼請求會轉發到100.10.10.10下的example1路徑。
apache virtualhost配置,參見:https://httpd.apache.org/docs/2.4/vhosts/examples.html
到這裡,我們就能回源host是什麼了。
那源站又是什麼呢?實際上從上圖可以看出,如果回源,隻是指定了在回源站點上最終通路的host(或者目錄),那具體是哪個站點(哪個IP)下面的目錄呢。這個時候,就需要通過源站的配置來獲得了,如果直接是IP,那就是對應IP伺服器。如果源站配置的是域名,那麼會先将源站域名,通過DNS解析,獲得真實的IP位址,在到該IP位址的站點下面,尋找對應的host(目錄)。
順便再來說一下自己對curl這個指令的了解吧,如下curl指令模仿http請求,通過-H選項,強制将http host請求標頭設定為指定的host如下圖所示,由于在進行CDN的配置,前面的https請求中的IP位址是一個CDN OC的位址,結果傳回為202 OK,表示在CDN請求可以傳回結果,已經成功緩存源站的資料。
既然CDN節點中,已經存在緩存的資源,那麼通過加速域名通路,真實的結果是什麼:
網上對這幾個字段解釋如下,還待詳細學習:
X-Cache-Lookup:Hit From MemCache 表示命中CDN節點的記憶體
X-Cache-Lookup:Hit From Disktank 表示命中CDN節點的磁盤
X-Cache-Lookup:Hit From Upstream 表示沒有命中CDN
注:如上僅是個人了解,如果有誤,歡迎各位指正,謝謝