rest - 可以使用 Cloudflare 缓存和保护 REST API 吗?

标签 rest caching single-page-application cloudflare ddos

我正在设计一个旨在供单页应用程序和 native 移动应用程序使用的 RESTful API。此 API 的某些调用会返回可以缓存一段时间的公共(public)结果。此外,需要速率保护来保护 API 免受未经授权的用户(蜘蛛)的攻击

我可以使用 Cloudflare 为我的 RESTful API 实现缓存和速率限制/DDOS 保护吗?

缓存:Cloudflare supports HTTP cache control headers因此 API 可以决定通过 GET 请求的每个实体是否是公共(public)的以及可以缓存多长时间。

  • 然而它是 不清楚缓存控制头是否也传到下游到客户端,那么还会触发浏览器缓存响应吗?这可能是不可取的,因为它会使故障排除更加困难
  • Akamai 有一个 Edge-Control header确保内容缓存在 CDN 而不是浏览器中。 可以用 Cloudflare 做类似的事情吗?

  • DDOS 防护:Cloudflare 支持有一篇文章 recommending that DDOS protection be disabled for backend APIs ,但这不适用于我的用例,即每个客户端都应该向 API 发出少量请求。 native DDOS 保护实际上符合我保护 API 免受机器人攻击的要求。
  • 我需要知道如何以编程方式检测 Cloudflare 何时提供验证码/我受到攻击等。页面 然后,这将允许 SPA/移动应用程序智能地使用react,并将用户重定向到一个 Web View ,在那里她可以展示她的“人性”。
  • 从 Cloudflare 文档中,当出现 DDOS 质询时发送什么 HTTP 状态代码并不明显。一个开源 cloudscraper绕过 Cloudflare DDOS 保护似乎表明验证码和质询页面以 HTTP 状态 200 交付。有没有比解析请求正文更好的方法来确定是否启动了 DDOS 保护?
  • Cloudflare apparently uses cookies记录谁成功解决了验证码。这显然会给原生应用程序带来一些额外的复杂性。 挑战解决后,有没有一种好方法可以将 Cloudflare session cookie 传输回 native 应用程序?

  • 可能这是一个高级 Cloudflare 用例 - 但我认为它很有希望,并且很高兴听到是否有人有类似的经验(在 Cloudflare 或其他 CDN 上)。

    最佳答案

    Cloudflare 已发布 a list of best practices将其与 API 一起使用。

    TL;DR,他们建议设置一个修补所有 API 请求的页面规则并在其上放置以下设置:

  • 缓存级别:绕过
  • 永远在线:关闭
  • Web 应用防火墙:关闭
  • 安全等级:除了“我受到攻击”
  • 浏览器完整性检查:关闭
  • 关于rest - 可以使用 Cloudflare 缓存和保护 REST API 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569021/

    相关文章:

    java - Spring 启动: automatic JSON message converter for @Requestbody GET doesn't work

    c# - 在 C# 中操作关键流缓冲区的最有效和可靠的方法是什么?

    caching - : UseMaxAge , UseExpires 哪个选项作为缓存选项更好

    javascript - 如果 npm 工作正常,为什么还要使用 Bower.js?

    ajax - 如何为 AJAX 查询返回纯文本?

    java - 如何在 Spring (Boot) 中装饰 REST 响应?

    asp.net - 测试 ASP.NET webforms 应用程序

    rest - 使用 IHttpActionResult 时,如何获取帮助文档以在 WebApi2 中工作?

    Jquery 缓存变量

    javascript - SPA : Separating backend administration from client side