提问人:SpacemanScott 提问时间:8/9/2023 更新时间:8/9/2023 访问量:41
如何在 XMLHttpRequest 中禁用“TCP 保持活动状态”
How to disable "TCP Keep-Alive" in a XMLHttpRequest
问:
我正在使用一个具有内部 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 个后终止连接。
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 寻求建议。
答: 暂无答案
上一个:尝试在应用程序内部发布数据
评论