關於OSS下CDN加速的緩存刷新問題


  • 問題描述:

    使用OSS存儲圖片,原圖片被覆蓋后,使用原鏈接還是訪問到的舊圖片,即返回的還是CDN緩存的內容。由於服務歷史原因,覆蓋的文件名還是同名文件。

  • CDN節點上資源的緩存策略:

  • 解決方式一:

    在阿里雲CDN控制台中開啟CDN自動刷新,但該刷新時間不固定,取決於刷新任務作業的時間,可能10分鍾,也可能半小時,經過簡單測試,一般自動刷新的時間范圍在10-20分鍾左右。

    如果需要立即覆蓋生效返回新內容的話,CDN自動刷新可能無法滿足需求,阿里雲在CDN文檔中提供了手動刷新CDN緩存的API及自動刷新的腳本。可以在更新了某個文件后,對該文件進行CDN刷新操作,保證線上立刻能夠獲取到最近版本的文件。

  • 手動刷新API:

    刷新節點上的文件內容

  • 自動化腳本:

    刷新預熱自動化腳本

  • 解決方式二:

    如果在站點或者服務中可以判斷是否需要刷新資源的話,在文件路徑后加上動態隨機值,再次訪問CDN則無法命中緩存,將會回源查詢,將返回新資源內容。但是CDN上原緩存內容失效后,需要去除隨機值,否則會導致CDN緩存一直無法命中。

  • 解決方式三:

    只開啟CDN自動刷新功能,有資源覆蓋情況下等待CDN緩存自動刷新即可,如果確實需要立即生效,則在控制台進行CDN刷新即可。這種方式就是手動操作了,適合頻次很低的情況下使用。

  • 下面備注一些OSS請求文件的響應頭,通過一些響應頭可判斷資源狀況:

    OSS中返回的完整響應頭如下:

Accept-Ranges: bytes
Age: 2433
Ali-Swift-Global-Savetime: 1609983652
Content-Length: 226863
Content-MD5: rTvI5hkONbouYYS0bAXK3A==
Content-Type: image/jpeg
Date: Thu, 07 Jan 2021 01:40:52 GMT
EagleId: 0e1d28a016099860855123037e
ETag: "AD3BC8E6190E35BA2E6184B46C05CADC"
Last-Modified: Wed, 06 Jan 2021 09:53:25 GMT
Server: Tengine
Timing-Allow-Origin: *
Via: cache56.l2cn2638[82,200-0,M], cache6.l2cn2638[84,0], cache14.cn1366[0,304-0,H], cache12.cn1366[3,0]
X-Cache: HIT TCP_IMS_HIT dirn:13:823421756
x-oss-cdn-auth: success
x-oss-hash-crc64ecma: 5457768927684361342
x-oss-object-type: Normal
x-oss-request-id: 5FF666A4E1B4FA343444814C
x-oss-server-time: 23
x-oss-storage-class: Standard
X-Swift-CacheTime: 3600
X-Swift-SaveTime: Thu, 07 Jan 2021 01:40:52 GMT
響應頭 備注
X-Cache 如果顯示HIT,則說明命中CDN節點上的緩存資源;如果顯示MISS,則說明未命中CDN節點上的緩存資源,直接回源站獲取
ETag ETag在每個Object生成時創建,用於標識一個Object的內容;ETag值可以用於檢查Object內容是否發生變化。不建議使用ETag值作為Object內容的MD5校驗數據完整性的依據。
LastModified Object最后被修改的時間。
X-Swift-CacheTime 字段值表示CDN節點上的允許緩存時間,即該文件可以在CDN節點上緩存多久。如果是0,則表示該請求無法緩存。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM