小樱 发表于 2024/8/26 01:46

Linux 服务器应用服务端源代码优化性能,connection: close协议HTTP/1.1与1.0正确关闭长连接的方式,curl来测试TIME_WAIT状态和CLOSING的区别

Linux 服务器应用服务端源代码优化性能,connection: close协议HTTP/1.1与1.0正确关闭长连接的方式,curl来测试TIME_WAIT状态和CLOSING的区别

这两个命令可以用来观察服务器的状况与测试

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S}'
netstat -n | grep ip地址

测试方法很简单,可以用curl,curl默认发起协议为HTTP/1.1
curl -v "http://ip地址"

HTTP/1.1并且作为客户端发送connection: close头给服务端,通知服务器立即关闭连接
curl -v -H "connection: close" "http://ip地址"

如果测试HTTP/1.0,就加个参数强制使用1.0
curl -v --http1.0 "http://ip地址"

HTTP/1.0
应当是始终默认自动关闭长连接的,查询会立即进入TIME_WAIT状态就是成功了

HTTP/1.1
1.1收到客户端发起connection: close头,虽然没看到CLOSING,但是会进入TIME_WAIT状态(此时已经算关闭成功了),并且回应一个头connection: close给客户端,这个头可以不用回复,浪费传输流量,1.0下也会回这个头都没必要的,因为客户端都主动发起了关闭连接,自然会发送完成关闭,不会在等待收到头才关闭了
一些特定场景下需要永久短链接,不然容易1.1因为客户端已经强制关闭了连接,但是客户端没有发connection: close,会导致服务端依旧处于长连接引起大量的FIN_WAIT1


目前暂时不知道Linux中的CLOSING状态是什么用途,关闭长连接主要是TIME_WAIT,只要进入TIME_WAIT就是代表连接已关闭

协议文档
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection

页: [1]
查看完整版本: Linux 服务器应用服务端源代码优化性能,connection: close协议HTTP/1.1与1.0正确关闭长连接的方式,curl来测试TIME_WAIT状态和CLOSING的区别