CDN是否支持Last-Modified头?全面解析与配置实战指南

上週幫客戶調優電商平台時,發現商品圖片明明沒更新,CDN卻頻繁回源抓檔案。用curl一查才驚覺Last-Modified頭被邊緣節點忽略了,這問題至少吃掉他們30%頻寬成本。今天這篇就來解剖這個常被低估的HTTP頭,實測六大CDN平台行為差異。

多數人以為啟用CDN緩存就萬事大吉,其實魔鬼藏在頭部協定裡。當瀏覽器帶著If-Modified-Since請求命中邊緣節點時,CDN要不要向源站驗證檔案新鮮度?這取決於三個關鍵:CDN廠商的預設行為、你的緩存規則配置、甚至作業系統時區設定。去年某金融APP就因Last-Modified時間戳未同步,導致用戶端載入混亂。

實測主流CDN平台發現有趣現象:Cloudflare預設會透傳Last-Modified,但若自訂緩存規則裡勾選\”Origin Cache-Control\”,它反而會覆寫源站設定;AWS CloudFront則需手動啟用\”Based on Headers\”緩存策略,否則直接無視Last-Modified。最麻煩的是Akamai,得透過Property Manager設定caching.ignoreOriginNoCache參數才能強制尊重源站頭。

分享我的Nginx實戰配置模板,重點在add_header Last-Modified $date_gmt這行:

曾遇過客戶源站用PHP動態輸出的Last-Modified帶有逗號(如:Wed, 21 Aug 2024 12:34:56 GMT),導致CDN節點解析失敗。建議用date(\"D, d M Y H:i:s T\", time())確保格式合規,必要時在CDN側配置Header Normalization功能自動修正。

行動端適配是另一個深坑。某些舊版Android Webview對Last-Modified的毫秒級差異異常敏感,我們在CDN配置層加入trim_modified_timestamp = 1s參數(邊緣節點自動捨去毫秒位),才解決了隨機性304失效問題。這案例讓我深刻體會:緩存協定從來不只是技術議題,更是用戶體驗的生死線。

評論:

  • 求教大佬!我們用Azure CDN發現Last-Modified在東京節點正常,但法蘭克福節點總是返回1970年時間,時區設定檢查三遍了…
  • ETag和Last-Modified同時存在時CDN優先認哪個?測試時發現Akamai行為和文檔寫的不一樣
  • 真實血淚推!上次被Last-Modified坑掉兩天查錯工時,原來是源站伺服器BIOS電池沒電導致時間漂移
  • 有沒有適合中小企業的開箱即用方案?看完全文覺得配置好複雜
  • 博主漏講重點:當使用CDN層級壓縮時,Last-Modified會被自動移除!這在Cloudflare的Enterprise計畫文檔第27頁有寫
  • Leave a comment

    您的邮箱地址不会被公开。 必填项已用 * 标注