尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

为什么Keep-Alive让网页快30%?http_study简单实验验证TCP连接复用

为什么Keep-Alive让网页快30%?http_study简单实验验证TCP连接复用 为什么Keep-Alive让网页快30%http_study简单实验验证TCP连接复用【免费下载链接】http_studyfollow me to study http项目地址: https://gitcode.com/gh_mirrors/ht/http_studyKeep-AliveTCP连接复用是HTTP/1.1默认开启的特性也是网页性能优化的第一块基石。本文基于开源学习项目http_studyfollow me to study HTTP用一套简单实验带你验证复用同一条TCP连接比每次请求都新建连接到底快多少以及快在哪里。一、Keep-Alive到底复用了什么一个网页往往要请求十几个资源HTML、JS、CSS、图片。如果每个资源都新建一条TCP连接那么每次都要经历TCP三次握手至少1个RTT往返每条新连接都要经历TCP慢启动带宽利用率从低爬到高HTTPS场景下还要叠加TLS握手1~2个RTT开启Keep-Alive后同一条TCP连接可以被多个HTTP请求复用以上开销只付一次。这就是快30%的来源——省掉的是时间和带宽爬坡而不是内容传输本身。 延迟越高的网络如跨地域访问复用连接的收益越明显本地实验里绝对值虽小但原理完全一致。二、实验环境三步跑起http_studyhttp_study 基于 OpenResty Nginx内置了配套的实验页面和脚本非常适合边学边验证。git clone https://gitcode.com/gh_mirrors/ht/http_study cd http_study/www ./run.sh start启动脚本位于 www/run.sh配置文件在 www/nginx.conf。其中与Keep-Alive直接相关的核心配置在www/conf/http/common.confkeepalive_timeout 60; # 空闲连接最多保持60秒 keepalive_requests 5; # 单条连接最多复用5个请求⚠️ 注意keepalive_requests 5意味着一条连接复用满5次后会被主动关闭——这正好是观察连接复用与关闭的天然实验条件。三、用curl验证连接复用只要3条命令第1步看响应头确认服务器支持Keep-Alivecurl -I http://127.0.0.1:8080/09-1响应头中出现Connection: keep-alive即表示连接将保持打开。/09-1对应的Lua脚本 www/lua/09-1.lua 会回显全部请求头方便你同时观察Host、User-Agent等字段。第2步连续发5个请求观察是否复用同一连接curl http://127.0.0.1:8080/10-1 \ http://127.0.0.1:8080/10-1 \ http://127.0.0.1:8080/10-1 -v 21 | grep -E Re-using|Connected第1个请求会显示Connected to ...后续请求显示Re-using existing connection复用现有连接——TCP连接复用在命令行层面得到直观验证。第3步触发连接关闭观察边界由于配置了keepalive_requests 5连续发第6个请求时你会看到重新出现Connected to说明旧连接被服务器关闭、新连接重新建立。www/lua/10-1.lua 提供了轻量级的GET测试端点每次响应都很小方便对比。四、快在哪连接复用省下的3笔账开销不复用每请求新建复用Keep-AliveTCP三次握手每个资源1次仅首资源1次TCP慢启动每条连接重新爬坡拥塞窗口保持高位TLS握手HTTPS每连接1~2个RTT仅首连接1次以一个请求10个资源的页面为例假设单次往返20ms仅握手一项就能省掉约 9×20ms180ms叠加慢启动对带宽利用率的影响总耗时缩短30%左右是常见水平。五、用Wireshark抓包眼见为实项目自带的wireshark/目录里保存了多份实验抓包如 wireshark/08-1.pcapng、wireshark/08-2.pcapng可以离线分析导入.pcapng文件后过滤tcp.flags.syn 1查看SYN包数量复用场景下N个HTTP请求只对应1个SYN不复用场景HTTP/1.0N个请求对应N个SYN且每段会话末尾能看到FIN包这是验证TCP连接复用最有说服力的方式。六、新手避坑keepalive_timeout怎么设别设成0keepalive_timeout 0会直接禁用复用项目里 www/conf/http/servers/https.conf 中部分演示location就用了0那是为了特定教学目的建议值30~75秒太短会频繁重建连接太长会占用服务端空闲资源反向代理场景Nginx作为代理时到上游的连接池大小由proxy_keepalive控制与对客户端的keepalive_timeout是两回事七、小结Keep-Alive让HTTP/1.1在同一TCP连接上串行处理多个请求省掉重复的三次握手、慢启动和TLS握手用curl -v的Re-using existing connection一行输出即可快速验证连接复用keepalive_requests达到上限后连接会被主动关闭是理解复用边界的最好实验想深入HTTP协议细节http_study 的Lua示例www/lua/目录按章节编号组织覆盖了请求头、代理、缓存等完整链路配合 README.md 中的RFC资料清单可以系统学习动手跑一遍这三个命令网页快30%就不再是一句口号而是你在终端里亲眼看到的真实结果。【免费下载链接】http_studyfollow me to study http项目地址: https://gitcode.com/gh_mirrors/ht/http_study创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表