iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0

上一篇的時候我們介紹了iNODE NINJA的CDN緩存機制,在這一篇的時候,我們就直接實作看看整個緩存的機制是怎麼運作的,透過瀏覽器header顯示的情況,再加上我們以前也用過幾家大廠的CDN,因此對於市場上CDN在緩存的設計規則概念當然也有了一定的瞭解程度。

因為過程中需要實際測試到根據源站快取的規則,因此我們會使用一些外部的源站來作為測試。

緩存實測

這裡我們特別挑選了幾間信用合作社的網站作為源站來使用,我們可以觀察裡面的image元素所帶的 Response header來作為測試我們iNODE NINJA快取規則的依據,此外針對整個路徑底下個別檔案改變快取與否的例外範例。

測試條件說明

https://ithelp.ithome.com.tw/upload/images/20230917/20160839cNn8fyUoDG.png
為了確定具體的快取時間情況,分別六種快取過期時間我們分別設定成6、7、8、9、10、11分鐘,藉此也能確認是吃到哪一個設定。

測試1 : 源站沒有具備任何限制快取的header的情況。

  • 原始狀態
    https://ithelp.ithome.com.tw/upload/images/20230917/20160839BEoFBkDqD5.png

我們先用基隆一信的網站來看,可以看到源站上的這張圖片index_photo_11-CDD.jpg不具備任何限制快取的header,例如cache-control、no-cache這些的情況,而jpg作為靜態資源自然是可以被CDN緩存的,因此我們透過帶自訂host與IP回源這個網站。

  • 使用緩存
    https://ithelp.ithome.com.tw/upload/images/20230917/20160839JFPEnsUAxz.png
    透過iNODE NINJA CDN訪問時可以看到出現了cache-control : max-age=600,這個意思就是在瀏覽器本機端緩存的過期時間為600秒 (10分鐘),也就是說瀏覽器在10分鐘後會另外再抓取一次該資源,這也意味著這個資源是吃到了「預設緩存檔案的瀏覽器過期時間」這個項目的設定。

詳細明說
底下的 X-Cache-Status : HIT 則是指這個資源在 CDN 這裡的節點上已經被快取了,之後如果有需要再取用該資源的情況,就會從CDN節點上抓取已經被緩存的檔案,實現加速效果,與降低源站被請求的壓力。

另外上面也被多加上了一個C-Type,這個也是忍者這裡加上來的,主要就是辨認該資源被緩存的情況(是會被預設緩存、還是預設不緩存、還是被強制緩存的狀態)。

*根據官方的說明,是有以下這些參數 :
pnc (pass no cache) 不緩存路徑
fnc 不緩存檔案
pc 緩存路徑
fc 緩存檔案
pc-f 強制緩存路徑
fc-f 強制緩存檔案
st 預設緩存
df 不緩存
ws websocket緩存 *

圖中的「st」就是預設緩存了,因為jpg檔位於預設緩存的副檔名類型中。
(詳細緩存選項說明請參照[Day13]建立域名(四):緩存介紹1
https://ithelp.ithome.com.tw/upload/images/20230917/2016083959xjA5cHi0.png

在比較常見的安裝包副檔案類型,例如apk或ipa這些卻是沒有的,如果要了話就可能得手動在緩存檔案裡面自己補上。
(見下面圖示說明)
https://ithelp.ithome.com.tw/upload/images/20230917/20160839iAHPW1wlL3.png

測試2 : 源站具有要求不快取的header的情況。

  • 說明
    我們同時找了另一組也是預設被快取的圖片檔案,但是這個檔案在源站上有被設定了不能緩存的標頭,我們同樣使用忍者進行接入,來看看在忍者上,這樣的資源會被怎麼處理。

https://ithelp.ithome.com.tw/upload/images/20230917/20160839KwWIlD5pQA.png
這裡選擇了金門縣信用合作社的網站,其實這些使用南資電腦中心解決方案的信用合作社網站在資源的屬性上都差不多,可以看到圖標memmark.gif下方的標頭是 Cache-Control : max-age=0, no-cache, no-store, must-revalidate。

https://ithelp.ithome.com.tw/upload/images/20230917/20160839hG7DnQFtPF.png
此時同樣可以看到cache-control : max-age=600,這個部分就是快取會在每位用戶機器本身的瀏覽器存在600秒。

  • 說明
    此時大家應該會有疑問?我們源站不是標頭上已經寫明這個資源要是no-cache了嗎,如果這個圖片是每個人都不一樣的,會不會其他用戶訪問到別人的圖片?這是不用擔心的,因為這些no-cache標頭的緣故,因此在CDN 的節點上並不會有快取到的情況,在下方的X-Cache-Status狀態始終都是MISS,所以快取的情況最多也是在每位個別用戶自己的瀏覽器中而已。
  • 緩存遵循源站路徑
    如果真的要遵循永遠都不要快取,連在瀏覽器內都不要被快取到,可以在「緩存遵循源站路徑」上填入該檔案所在的路徑,這個檔案的路徑位於 https://ccop2.2etrial.com/images/memmark.gif 。只要在這個選項上填入路徑即可
    https://ithelp.ithome.com.tw/upload/images/20230917/201608399HAsov8XYn.png
    https://ithelp.ithome.com.tw/upload/images/20230917/20160839COLJM7muz4.png

從上圖可得知,底下所有檔案就是完全遵循源站的緩存相關參數與配置了,可以看到在cache-control與源站完全一樣,甚至也沒有X-Cache-Status的狀態,這也意味著每次用戶訪問都必須回源將該圖片存取後再由CDN傳遞到訪問客戶手上。

測試3 : 全部不快取的路徑底下要設定個別幾個需要快取的資源

如果源站為了方便設置,所以把某一路徑底下的所有圖片都設定成無快取,但我還是有個別幾張圖片想要被CDN完全快取,包含快取在CDN節點上與瀏覽器上呢?
https://ithelp.ithome.com.tw/upload/images/20230917/20160839eU215OOe8V.png

  • 強制緩存檔案
    這時候你可以設定「強制緩存檔案」,例如上述金門信用合作社的網頁所有在images底下的圖片都被源站設定成不緩存的狀態,但你可以特別針對banner1.gif這個檔案做出強制緩存,方法就是在裡面將該路徑寫進去,記得要用正規化的方式,就是[images/banner1.gif]。
    https://ithelp.ithome.com.tw/upload/images/20230917/20160839o4qsajyPiO.png

經過修改設定以後,這個banner1.gif就有成功被快取在CDN節點了,C-Type被改為fc-f,另外X-Cache-Statues也是HIT。

結論

上面我們簡單提了幾種快取的情況,當然因為快取的內容是敏感的,如果不慎將涉及個人資料的內容快取在CDN上,並且誤傳遞給他人瀏覽到,將會有非常嚴重的後果。這裡也奉勸大家,當您要把網站正式上線前,務必先使用測試域名與資源詳細測試過快取的規則以後再行上線,以確保沒有上述資料可能發生洩漏的問題產生,以及最佳的CDN快取加速效果。


上一篇
[Day13]建立域名(四):緩存介紹①
下一篇
[Day15]自建CDN平台介面介紹
系列文
10年專業ISP服務商之蛻變 從無到有自建屬於自己的CDN服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言