同事发现我们对一些采集爬虫进行限制后,给出的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改为不缓存。
评论