如何在 XMLHttpRequest 中禁用“TCP 保持活动状态”

How to disable "TCP Keep-Alive" in a XMLHttpRequest

提问人:SpacemanScott 提问时间:8/9/2023 更新时间:8/9/2023 访问量:41

问:

我正在使用一个具有内部 HTTP(S) 服务器的嵌入式固件项目。它使用 XMLHttpRequest 对设备执行更新。

AJAX 代码的核心是这样的:

var oReq = new XMLHttpRequest();

var fileArray = [fileReader.result];
var fileBlob = new Blob(fileArray);
oReq.onreadystatechange = function() {
    if (this.readyState == XMLHttpRequest.DONE) {
       if (this.status == 200) {
             ...
        }
    }
}

oReq.open("POST", url, true);
oReq.timeout = 60000;
oReq.withCredentials = true;
oReq.send(fileBlob);

它工作正常,只是最近上传的大小变大了一点。

在执行大型更新时,FireFox 会发送一堆 TCP Keep-Alive 消息。然后在错过其中 10 个后终止连接。

enter image description here

Google Chrome 和 Edge 似乎没有这样做。没有从他们那里窥视。但FF每秒都在试图敲击设备的肩膀。

固件正忙于更新上传的内容,因此花费的时间比 FireFox 允许的时间要长。这大约是 4 秒太长了。

如何调整可以遗漏的次数?或者它们之间的间距是多少?或者只是首先阻止 XMLHttpRequest 发送这些 TCP Keep-Alive?就像 Chrome 和 Edge 一样。

我看遍了,似乎每个可能的属性或设置都是不允许的(或者只是普通不起作用):

  • 连接:关闭是受限制的标头
  • Keep-Alive:xxxx 是受限制的标头。
  • XMLHttpRequest->timeout 属性不执行任何操作。

这些 TCP Keep-Alive 似乎来自 OSI 堆栈的更深层次,而不仅仅是应用程序级别。

逻辑会阻止响应 HTTP(S) 文件 POST,因为在处理上传之前,上传是否可接受是未知的(可以说成功或失败,直到我们真正完成并知道它是成功还是失败)。

我简直不敢相信在某些设计中将某些请求/响应限制在 10 秒以内......并且不允许用户补偿它。RESTful 更新可能需要更长的时间。

TIA 寻求建议。

ajax xmlhttp请求 保持活动状态

评论


答: 暂无答案