当前位置

CDN对错误状态的缓存时间

James Qi 在 2021年9月3日 - 14:22 提交

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

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。