同事發現我們對一些采集爬蟲進行限制後,給出的403拒絕狀态也會被CDN緩存起來,造成後續正常用戶訪問的時候也被拒絕,于是詳細了解了各CDN對http/https訪問報錯狀态的緩存處理。
首先是看Cloudflare,其文檔 Configuring cache TTL by status code 中有明确說明,如果在沒有設置Cache Control的情況下:
- HTTP 200, 301: 120分鐘
- HTTP 302: 20分鐘
- HTTP 404: 10分鐘
- HTTP 403: 1分鐘
- HTTP 500, 502, 503, 504: 0秒
如果我們希望修改上面的默認值,就可以在PHP程序或者Apache設置中對Head進行設置。
再在網上搜索,華為CDN有一篇文章Does CDN Cache Status Codes 404 and 403? 裡面隻有簡單的一句:
默認情況下,CDN隻對404緩存3秒,其它400、500錯誤都不緩存。
Google Cloud的CDN,請看狀态代碼和默認 TTL:
- 狀态代碼 含義 TTL
- HTTP 300 多種選擇 10 分鐘
- HTTP 301 和 308 永久重定向 10 分鐘
- HTTP 302 和 307 臨時重定向 默認不緩存
- HTTP 404 未找到 120 秒
- HTTP 405 找不到方法 60 秒
- HTTP 410 已不存在 120 秒
- HTTP 421 誤發請求 60 秒
- HTTP 451 由于法律原因而無法使用 120 秒
- HTTP 501 未實現 60 秒
可見每個CDN提供商都有不同的默認設置策略。
百度雲加速的文檔中沒有找到相應的内容。
2022年8月7日補充:再看 Configuring cache TTL by status code 中現在顯示的是:
HTTP status code Default TTL
200, 206, 301 120m
302, 303 20m
404, 410 3m
403 0s
500, 502, 503, 504 0s
不知道是不是cloudflare已經修改對403的緩存策略?從以前的1分鐘改為0秒了?
2022年8月10日再補充:從“Wayback Machine 時光機”這個網站查看這個頁面去年11月的記錄,确實與我去年記錄博客的時候一樣,以前是對403緩存1分鐘的,後面修改為不緩存403了。
另外,我們同事進行的測試也證實Cloudflare不緩存403狀态頁面。但同事在測試百度雲加速的時候,發現某些情況下百度雲加速會緩存403狀态頁面1分鐘,而不是像我們咨詢他們客服說的不緩存,他們的客服不太懂技術、不太專業。百度雲加速以前一直是與Cloudflare合作的,技術和策略也與Cloudflare類似,但去年他們不合作了,估計緩存403頁面1分鐘的策略也沒有跟着Cloudflare改為不緩存。
评论