gpt4 book ai didi

javascript - xmlHttpRequest 不关闭连接

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:42 26 4
gpt4 key购买 nike

我发出一个 AJAX 请求,根据响应我将刷新当前页面,代码如下:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
var res = xhttp.responseText;
if (res.length > 0) {
window.location = res;
}
}
}
xhttp.open("POST", "getlink.php", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send('id='+id);

但是我注意到服务器上的连接没有关闭。运行此命令时:

netstat -anl | grep 80 | awk '/^tcp/ {t[$NF]++}END{for(state in t){print state, t[state]} }'

我看到很多连接处于 TIME_WAIT 状态:

LAST_ACK 4
LISTEN 2
SYN_RECV 2
ESTABLISHED 1421
FIN_WAIT1 9
FIN_WAIT2 17
TIME_WAIT 2250

xmlHttpRequest 似乎不会关闭连接,这会在服务器上造成很多问题。

最佳答案

这不是错误,这是一个功能!

它叫做Connection keep-alive并且是 HTTP 协议(protocol)的一项功能,适用于所有 HTTP 连接,而不仅仅是由 XMLHttpRequest 创建的连接。

所以基本上这个想法是打开一个 TCP 连接是一件复杂的事情,因为你需要进行代价高昂的三次握手来建立连接和分配系统资源。然而,大多数网页一次加载许多资源。这是对每个图像的一个请求,对每个 CSS 文件的一个请求,依此类推。为了加快加载速度并减少服务器负载,HTTP 允许与服务器的连接保持打开状态,并重新用于后续请求。

该行为是使用来自服务器的 header 来控制的,这些 header 指定客户端最多应该打开多少个连接,以及在空闲时间多少秒后应该关闭连接。如果您发现连接过多的服务器出现问题,您应该调整这些 header ,这些 header 通常可以在您的网络服务器配置文件中配置。

关于javascript - xmlHttpRequest 不关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33659909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com