Javascript 限制AJAX响应的大小
我正在构建一个分散的应用程序,我不控制服务器,只控制客户端,我想添加一些健全的检查和预防措施来阻止坏人做恶意的事情。这涉及到许多其他事情,通过使用从服务器发送的任意有效负载数据来防止客户机上的DoS尝试 问题是:客户端如何限制通过jQueryAjax从服务器接收的数据的最大大小?如果我希望获取几个字节的JSON,而在发出AJAX请求时却收到一个30MB的视频文件,那么在收到前16KB的请求后,如何停止请求并抛出错误呢Javascript 限制AJAX响应的大小,javascript,jquery,ajax,sanity-check,Javascript,Jquery,Ajax,Sanity Check,我正在构建一个分散的应用程序,我不控制服务器,只控制客户端,我想添加一些健全的检查和预防措施来阻止坏人做恶意的事情。这涉及到许多其他事情,通过使用从服务器发送的任意有效负载数据来防止客户机上的DoS尝试 问题是:客户端如何限制通过jQueryAjax从服务器接收的数据的最大大小?如果我希望获取几个字节的JSON,而在发出AJAX请求时却收到一个30MB的视频文件,那么在收到前16KB的请求后,如何停止请求并抛出错误呢 虽然我认识到我的工作性质是独特的,但任何反馈都是wwlcome。正如@Barm
虽然我认识到我的工作性质是独特的,但任何反馈都是wwlcome。正如@Barmar在评论中指出的,这是一个简单的案例,检查下载的onprogress事件,并在其超过我期望的最大大小时终止 以下是任何相关方的代码:
var xhr = $.ajax({
url: "your-url",
success: () => {
// ...
},
xhrFields: {
onprogress: function(progress) {
if (progress.loaded > config.MAX_HASH_DESCRIPTOR_SIZE) {
// stop any unreasonably long malicious payload downloads.
xhr.abort()
}
}
}
})
您无法控制服务器发送的内容。这个问题其实并没有什么意义,您可以做的一件事就是尝试一个HEAD请求并检查content-length报头,然后再进行GETHow,客户机如何限制他们不能限制的最大大小,除非您作为API开发人员,添加一种方法来处理这个问题。因此,如果您可以控制API,您可以通过在有效负载中发送max_results或max_response_size键来实现一些限制,但这不是我见过的事情。@charlietfl我知道我无法控制它,但如果响应太大,我只想中止请求。我使用IPFS查找散列,所以不要认为HEAD会起作用。许多执行批量请求的API都有一个参数,指定要返回多少结果。