【发布时间】:2020-05-11 09:00:47
【问题描述】:
在Jquery multiple Ajax Request in array loop链接的评论中,作者说在循环中发出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();
}
ps。我知道我们可以“将所有数据聚集在一起,然后在一个请求中将其发送到服务器”,但我需要运行生成静态页面,将数据从客户端传递到服务器。因此,如果有成千上万的页面我必须通过 AJAX 传递给服务器,由于 POST 请求的限制,它们不能作为单个请求传递。
为什么会这样?我只想将生成器的所有逻辑保留在客户端,并在服务器上仅调用标准操作,例如读取和写入文件。即客户端通过ajax和服务器读取功能读取模板和内容,根据其逻辑构建页面html并将整个html传递给服务器写入一个html文件
【问题讨论】:
-
为什么需要将几十个页面从客户端传递到服务器?不应该反过来吗?关于 ddos,它绝对取决于客户端和请求的数量以及服务器基础设施,因此对于一个客户端,执行多个 ajax 请求应该没问题,但如果有数千个客户端有数千个并发请求跨度>
-
对于递归调用我不认为它会导致你自己DOSing,因为调用堆栈有限制(在一个函数中调用的函数的深度,比如说),通常无限递归的错误是@987654323 @
-
我们谈论每个客户端有多少个 ajax 请求?查看您的代码实际上永远不会停止/无限请求
-
@johnSmith 这只是一个简化的例子。我知道我们需要一个条件来在我没有写入代码的某个时候停止该过程。作为您的第一条评论,请参阅添加到我的帖子中的最后一段
-
好吧,AJAX 调用是异步的,所以按照您的意愿进行操作,您应该将 xmlhttprequest 设置为“同步”,以便它们按顺序进行。是的,但没有关于每分钟每个客户端有多少潜在客户和请求以及难以分辨的有效负载量的信息(您的概念对我来说似乎效率低下,我认为您应该发布所需的配置并在服务器端生成 html)
标签: javascript ajax xmlhttprequest ddos