【发布时间】:2015-06-16 14:53:35
【问题描述】:
我正在设计一个旨在供单页应用程序和本机移动应用程序使用的 RESTful API。此 API 的某些调用会返回可以缓存一段时间的公共结果。此外,还需要速率保护来保护 API 免受未经授权的用户(蜘蛛)的攻击
我可以使用 Cloudflare 为我的 RESTful API 实施缓存和速率限制/DDOS 保护吗?
缓存: Cloudflare supports HTTP cache control headers,因此 API 可以决定通过 GET 请求的每个实体是否是公共的以及可以缓存多长时间。
- 但是不清楚缓存控制头是否也被下游传递给客户端,所以也会触发浏览器缓存响应?这可能是不可取的,因为它可能会使故障排除更加困难
- Akamai 有一个Edge-Control header 以确保内容缓存在 CDN 中,而不是浏览器中。 可以用 Cloudflare 做类似的事情吗?
DDOS 保护: Cloudflare 支持有一篇文章 recommending that DDOS protection be disabled for backend APIs,但这不适用于我的用例,即每个客户端都应该向 API 发出少量请求。原生 DDOS 保护实际上符合我保护 API 免受机器人攻击的要求。
我需要知道如何以编程方式检测 Cloudflare 何时提供 Captcha / 我受到攻击 等页面然后,这将允许 SPA / 移动应用程序智能地做出反应,并将用户重定向到一个网络视图,在那里她可以展示她的“人性”。
从 Cloudflare 文档中,当出现 DDOS 质询时发送什么 HTTP 状态代码并不明显。绕过 Cloudflare DDOS 保护的开源 cloudscraper 似乎表明 Captcha 和质询页面以 HTTP 状态 200 传递。有没有比解析请求正文更好的方法来确定 DDOS 保护是否启动?
Cloudflare apparently uses cookies 记录谁成功解决了验证码。这显然会给原生应用程序带来一些额外的复杂性。 在挑战解决后,有没有将 Cloudflare 会话 cookie 传输回本机应用程序的好方法?
这可能是一个高级 Cloudflare 用例 - 但我认为它很有希望,并且很高兴听到是否有人有类似的经验(在 Cloudflare 或其他 CDN 上)。
【问题讨论】:
-
你能告诉我们你发现了什么吗?
-
暂无更新,除了 Cloudflare 支持无法告诉我如何以编程方式检测 DDOS 页面。
-
“Akamai 有一个 Edge-Control 标头,以确保内容缓存在 CDN 中,而不是浏览器中。可以使用 Cloudflare 做类似的事情吗?”我对此非常感兴趣,找不到解决方法。如果您想立即更改用户头像,您不能在浏览器中缓存,而且 Cloudflare(截至今天)不允许您仅在他们的服务器上缓存,即使对于通过页面规则至少有 30 秒的企业客户也是如此。
-
有新的更新伙伴吗? 2 年多过去了,看起来 Cloudflare 在 API 的 DDOS 保护方面没有取得任何进展
-
可以使用标头
Cache-Control: s-maxage=200, max-age=60(s-maxage = edge TTL) 设置与浏览器 TTL 不同的“edge” TTL - 请参阅 support.cloudflare.com/hc/en-us/articles/…
标签: rest caching single-page-application cloudflare ddos