如何通过ajax调用处理大量请求

时间:2018-04-25 21:20:57

标签: php ajax apache server xmlhttprequest

我进行了这项测试:

在我的" raspberry pi"我主持一个网站

然后当我加载网站时,我打开DevTools并输入以下代码:

setInterval(function(){
  $.ajax({ 
        success: function(result){
           console.log(result);
        }
     });
 },1);

这会每隔1 ms向同一页面发出一次请求

10秒后,我收到此错误" net :: ERR_INSUFFICIENT_RESOURCES"

在这种情况下," raspberry pi"我知道这是有限的,但是在webhost上大量请求的相同条件应该会使服务器减速。

我的问题是,在生产环境中,避免这种大规模请求注入的最佳做法是什么?

php(在我的情况下)应该处理这个请求吗? 是Apache吗? 防火墙?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

net::ERR_INSUFFICIENT_RESOURCES是Google Chrome错误,只是浏览器说它无法处理更多数据,可能是因为您有太多并行的AJAX调用。

在这种情况下,你的Raspberry Pi不是罪魁祸首,工作得很好,只是你的客户端代码需要一些优化,例如你可以等待之前的ajax调用成功再发送另一个。

我猜你的问题更多是关于“如何处理DOS攻击”,如果你想保护自己免受DOS攻击,最好的方法之一(在我看来)将是Fail2Ban(或任何等效的) ,它允许您使用Apache访问日志(或任何其他日志)来检测恶意请求。您可以将其设置为检测客户端何时发送过多请求,然后禁止它的IP。

有很多在线教程,我不会详细说明如何在这里使用

当你只有一个恶意客户端时,这是一个很好的方法,在DDOS(分布式DOS)的情况下,你可能需要处理来自世界各地的数千个不同的IP,在这种情况下,Fail2Ban就像是一个创可贴一个开放的伤口。 DDOS实际上很难对付,您可能需要为您处理外部服务(例如Cloudflare)

我希望我回答你的问题,祝你有个美好的一天