Adi*_*aqi 1 javascript linux ajax
我发出一个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);
Run Code Online (Sandbox Code Playgroud)
但是我注意到服务器上的连接没有关闭。运行此命令时:
netstat -anl | grep 80 | awk '/^tcp/ {t[$NF]++}END{for(state in t){print state, t[state]} }'
Run Code Online (Sandbox Code Playgroud)
我看到许多处于TIME_WAIT状态的连接:
LAST_ACK 4
LISTEN 2
SYN_RECV 2
ESTABLISHED 1421
FIN_WAIT1 9
FIN_WAIT2 17
TIME_WAIT 2250
Run Code Online (Sandbox Code Playgroud)
似乎xmlHttpRequest不会关闭连接,从而在服务器上造成很多问题。
这不是一个错误,这是一个功能!
它称为“ 连接保持活动”,是HTTP协议的功能,适用于所有HTTP连接,而不仅仅是XMLHttpRequest创建的连接。
因此,从根本上说,打开TCP连接是一件复杂的事情,因为您需要进行昂贵的三向握手才能建立连接并分配系统资源。但是,大多数网页一次加载许多资源。每个图像一个请求,每个CSS文件一个请求,依此类推。为了加快加载速度并减少服务器负载,HTTP允许与服务器的连接保持打开状态,并重新用于后续请求。
使用服务器标头控制该行为,标头指定客户端应以最大数量打开多少个连接,以及在空闲时间数秒后应关闭该连接。如果发现连接过多的服务器存在问题,则应调整这些标头,这些标头通常可以在Web服务器的配置文件中进行配置。
| 归档时间: |
|
| 查看次数: |
3142 次 |
| 最近记录: |