-
問題描述:
使用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,則表示該請求無法緩存。 |