Javascript 通过递归函数和DDOS调用多个ajax

Javascript 通过递归函数和DDOS调用多个ajax,javascript,ajax,xmlhttprequest,ddos,Javascript,Ajax,Xmlhttprequest,Ddos,在该链接的评论中,作者表示,在循环中发出ajax请求可能最终导致DDOS攻击 这通常只应用一个循环还是多个ajax调用?我的意思是,如果我通过递归函数(如 ajax(0); ajax(index) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if(this.readyState == 4 && this.status == 200) {

在该链接的评论中,作者表示,在循环中发出ajax请求可能最终导致DDOS攻击

这通常只应用一个循环还是多个ajax调用?我的意思是,如果我通过递归函数(如

ajax(0);

ajax(index) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if(this.readyState == 4 && this.status == 200) {
            ajax(index+1)
        }
    };
    xhr.open('POST', 'http://example.com/ajax_handler.php');
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
    xhr.send();
}
另外,我知道我们可以“将所有数据聚集在一起,然后在单个请求中将其发送到服务器”,但我需要运行生成静态页面,将数据从客户端传递到服务器。因此,如果有成千上万的页面必须通过AJAX传递给服务器,那么由于POST请求的限制,它们不能作为一个请求传递


为什么会这样?我只想将生成器的所有逻辑保留在客户端,并在服务器上仅调用标准操作,如读取和写入文件。也就是说,客户机通过ajax和服务器读取功能读取模板和内容,根据其逻辑构建页面html,并将整个html传递给服务器,以写入html文件

Rory McCrossan描述的问题是,如果您同时发出多个请求。如果您有很多请求,您可能会使服务器(和/或网络连接)过载—您不应该一次发出大量请求。(可能最好不要每秒向服务器发送超过5个请求,或者类似的内容。)

但是在你的代码中,你并没有立即发送请求;您在任何时候最多只有一个活动请求,因此他所描述的问题不需要您担心

也就是说

我必须通过AJAX将成千上万的页面传递到服务器


这是一个非常奇怪的要求,即使网络没有过载,也需要大量带宽。考虑是否有更优雅的解决方案,例如在页面被请求时生成/发送一个页面。

为什么你需要从客户端向服务器传递几十页的页面?难道不是相反吗?关于ddos,它完全取决于客户端和请求的数量以及服务器基础设施,因此对于一个客户端,执行多个ajax请求应该可以,但是如果有数千个客户端同时请求数千个递归调用,我认为这不会导致您自己的失败,由于调用堆栈有限制(比如说,在一个函数中调用的函数的深度),无限递归的错误通常是
超过了最大调用堆栈大小
关于每个客户机有多少ajax请求?看看你的代码,它实际上永远不会停止/无限requests@johnSmith这只是一个简单的例子。我知道我们需要一个条件来在某个点上停止进程,我只是没有写入代码。作为您的第一条评论,请参见添加到我的postWell中的最后一段,AJAX调用是异步的,因此,如果您想这样做,应该将xmlhttprequest设置为“synchrone”,以便按顺序进行调用。是的,但是没有关于每分钟有多少潜在客户机和每个客户机的请求以及负载量的信息,这很难说(我觉得您的概念似乎不够有效,我认为您应该发布所需的配置并在服务器端生成html)谢谢。然而,Rory McCrossan刚刚在页面上回复说,“在递归函数中发出[多个ajax请求]具有相同的问题”,这是同步递归函数中的DDOS,是的,但在异步递归函数中不是。如果递归函数在初始化最后一个请求后立即调用自己,您将提出许多并行请求。但是,如果递归函数只在最后一个请求完成后才调用自己,就像在您的例子中一样,那么在任何时候都只有一个请求在进行。您将消耗服务器资源,但这并不存在任何固有的问题