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

In the comment by the link Jquery multiple Ajax Request in array loop the author said that making ajax requests in a loop may end up DDOS-ing ourselves.

通常,这仅适用于循环还是多个ajax调用?我的意思是,如果我通过递归函数(例如,递归函数)发出多个ajax请求,可能也会产生DDOS风险

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();
}

ps。我了解我们可以“将所有数据聚合在一起,然后在单个请求中将其发送到服务器”,但是我需要运行生成静态页面,以将数据从客户端传递到服务器。因此,如果有成千上万的页面必须通过AJAX传递给服务器,则由于POST请求的限制,它们不能作为一个请求传递。

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

评论
  • et_ea
    et_ea 回复

    罗里·麦克罗斯桑(Rory McCrossan)描述的问题是,如果您一次发出多个请求。如果您有很多请求,则可能会使服务器(和/或网络连接)超载-您不应一次发出大量请求。 (最好不要每秒发送超过5个请求到服务器,或类似的东西。)

    但是在您的代码中,您不会立即发出请求;您在任何时候最多只有一个请求处于活动状态,因此他描述的问题不必担心。

    那就是

    我必须通过AJAX传递成千上万的页面

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