【CS.CN】深入探讨下HTTP的Connection头:通过keep-alive实现高效网络连接


在这里插入图片描述

0 序言

0.1 由来

Connection头部字段在HTTP/1.1中被引入,主要用于控制网络连接的持久性。最常见的值是keep-aliveclose。当使用keep-alive时,TCP连接在一次请求/响应之后不会立即关闭,允许复用连接以处理后续请求。这样可以显著减少TCP连接的建立和终止带来的开销。

可以将Connection: keep-alive机制比作一条常开的热线电话:

  1. 情景设定
    • 你需要频繁打电话给朋友,但每次都要重新拨号和挂断。
  2. 正常流程
    • 每次需要联系朋友时,你拨通电话,交流完毕后挂断。
  3. 使用Connection: keep-alive
    • 你保持电话接通状态,这样可以随时交流,不用每次重新拨号和挂断。

0.2 使用场景

  • 频繁的HTTP请求:当客户端需要频繁与服务器通信时,使用keep-alive可以避免每次请求都重新建立TCP连接,从而减少延迟和资源消耗。

  • 高性能应用:在需要高效处理大量HTTP请求的应用场景中,keep-alive可以显著提升性能。

    • 减少延迟:避免频繁的TCP连接建立和关闭,减少网络延迟。
    • 降低资源消耗:减少CPU和内存开销,提高服务器的处理能力。

0.3 现在还需要吗?

虽然Connection: keep-alive在某些情况下依然有用,但现代HTTP/2和HTTP/3协议中已经内置了连接复用机制,使其重要性有所降低:

  • HTTP/2和HTTP/3:现代协议已经支持多路复用,一个连接可以处理多个请求和响应。
  • 高效网络:现代网络基础设施的改进使得TCP连接的建立和关闭开销相对较低。

是否需要使用Connection: keep-alive取决于具体的应用场景:

  • 需要:在使用HTTP/1.1的环境中,尤其是需要频繁请求的场景下,依然可以使用。
  • 不需要:在使用HTTP/2或HTTP/3的环境中,已经不需要显式设置keep-alive

1 Connection: keep-alive的机制

Connection 是一个请求和响应消息头,用于控制网络连接的持久性。常见的值包括keep-aliveclose

规范中规定,Connection: keep-alive表示请求结束后保持连接不断开,允许复用连接。相反,Connection: close则表示请求结束后立即关闭连接。

例如,如果使用keep-alive,服务器在处理完第一个请求后不会关闭连接,而是继续等待下一个请求。

2025-06-17 12:34:39,079 [WARN] org.springframework.security.authentication.event.LoggerListener Authentication event InteractiveAuthenticationSuccessEvent:2025-06-17 12:34:40 JobProxy@7f87650a run:消息推送 2025-06-17 12:34:44,794[ERROR] /kmisb/project/portal/home.jsp - 你的主机中的软件中止了一个已建立的连接。 java.io.I0Exception Create breakpointLingma →: 你的主机中的软件中止了一个已建立的连接。 at sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:1.8.0_151] at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51) ~[na:1.8.0_151] at sun.nio.ch.I0Util.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.8.0_151] at sun.nio.ch.I0Util.write(IOUtil.java:65) ~[na:1.8.0_151] at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) ~[na:1.8.0_151]<16 internal lines> at org.springframework.security.web.context.0nCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:437) ~[spring- at net.bull.javamelody.FilterServletOutputStream.flush(FilterServletOutputStream.java:65) ~[javamelody-core-1.56.0.jar:1.56.0] at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:297) ~[na:1.8.0_151] at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) ~[na:1.8.0_151] at java.io.0utputStreamWriter.flush(OutputStreamWriter.java:229) ~[na:1.8.0_151] at java.io.PrintWriter.flush(PrintWriter.java:320) ~[na:1.8.0_151] at net.bull.javamelody.FilterServletResponseWrapper.flushBuffer(FilterServletResponseWrapper.java:143) ~[javamelody-core-1.56.0.jar:1.56.0] at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:199) ~[javamelody-core-1.56.0.jar:1.56.0] at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:176) ~[javamelody-core-1.56.0.jar:1.56.0]<2 internal lines> at cn.com.jtv.mf.module.workflow.WorkflowProxyFilter.doFilter(SourceFile:76) ~[miracle-6.21.0.jar:na]<2 internal lines> at cn.com.jtv.mf.core.web.filter.HttpAddHeaderFilter.doFilter(SourceFile:48) ~[miracle-6.21.0.jar:na]<2 internal lines> at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) ~[spring-security-web-3.2.10.RELEASE.jar:na] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) ~[spring-security-web-3.2.10.REL at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) ~[spring-security-web-3.2.10.RE at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) ~[spring-security-web-3.2.10.RELEASE.jar:na]
06-18
Current Time: Sunday, 28-Sep-2025 13:37:46 CST Restart Time: Sunday, 28-Sep-2025 13:10:23 CST Parent Server Config. Generation: 1 Parent Server MPM Generation: 0 Server uptime: 27 minutes 22 seconds Server load: 8.72 4.16 2.58 Total accesses: 458 - Total Traffic: 1.7 MB - Total Duration: 535065 CPU Usage: u1.7 s1.71 cu0 cs0 - .208% CPU load .279 requests/sec - 1091 B/second - 3912 B/request - 1168.26 ms/request 7 requests currently being processed, 43 idle workers Slot PID Stopping Connections Threads Async connections total accepting busy idle writing keep-alive closing 0 17768 no 2 yes 2 23 0 0 0 1 17769 no 4 yes 5 20 0 0 0 Sum 2 0 6 7 43 0 0 0 ____________W__W__________K_WW______WW____________.............. ................................................................ ...................... Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, "C" Closing connection, "L" Logging, "G" Gracefully finishing, "I" Idle cleanup of worker, "." Open slot with no current process Srv PID Acc M CPU SS Req Dur Conn Child Slot Client Protocol VHost Request 0-0 17768 0/7/7 _ 1.05 9 1815 7439 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037869259 HTTP/1.1 0-0 17768 0/7/7 _ 1.04 12 1478 5701 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037873259 HTTP/1.1 0-0 17768 0/7/7 _ 1.07 7 1609 8253 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037858259 HTTP/1.1 0-0 17768 0/7/7 _ 1.05 9 1825 7637 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037862259 HTTP/1.1 0-0 17768 0/7/7 _ 1.05 10 1414 6639 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037856259 HTTP/1.1 0-0 17768 0/7/7 _ 1.07 6 1261 8021 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037877259 HTTP/1.1 0-0 17768 0/7/7 _ 1.07 7 1578 8705 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037863259 HTTP/1.1 0-0 17768 0/7/7 _ 1.08 6 1289 8677 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037878259 HTTP/1.1 0-0 17768 0/7/7 _ 1.10 3 1775 8508 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037881259 HTTP/1.1 0-0 17768 0/7/7 _ 1.08 5 1244 7632 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037858259 HTTP/1.1 0-0 17768 0/7/7 _ 1.09 4 1283 7451 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037873258 HTTP/1.1 0-0 17768 0/7/7 _ 1.10 1 2053 9754 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037881260 HTTP/1.1 0-0 17768 40/6/6 W 0.98 1 0 7637 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037875260 HTTP/1.1 0-0 17768 0/6/6 _ 1.10 3 1696 6700 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037880259 HTTP/1.1 0-0 17768 0/7/7 _ 1.11 1 1996 8040 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037868259 HTTP/1.1 0-0 17768 46/6/6 W 1.00 1 0 6886 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037883259 HTTP/1.1 0-0 17768 0/6/6 _ 1.01 17 1312 6811 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037867259 HTTP/1.1 0-0 17768 0/6/6 _ 1.01 16 1485 6961 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037849259 HTTP/1.1 0-0 17768 0/6/6 _ 1.03 13 1977 8766 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037872259 HTTP/1.1 0-0 17768 0/6/6 _ 1.02 15 1637 7518 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037863259 HTTP/1.1 0-0 17768 0/6/6 _ 1.01 17 1357 5403 0.0 0.05 0.05 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037862259 HTTP/1.1 0-0 17768 0/6/6 _ 1.00 18 1428 5523 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037861258 HTTP/1.1 0-0 17768 0/5/5 _ 1.02 14 2113 7304 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037870259 HTTP/1.1 0-0 17768 0/6/6 _ 1.04 12 1500 8499 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037860259 HTTP/1.1 0-0 17768 0/6/6 _ 1.05 11 1448 7448 0.0 0.01 0.01 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037861258 HTTP/1.1 1-0 17769 0/14/14 _ 1.95 3 1723 14115 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037861258 HTTP/1.1 1-0 17769 0/12/12 _ 1.98 0 1439 14703 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037875259 HTTP/1.1 1-0 17769 0/12/12 _ 1.98 1 1965 14616 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037862259 HTTP/1.1 1-0 17769 47/12/12 W 1.87 1 0 13280 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037883225 HTTP/1.1 1-0 17769 39/12/12 W 1.85 1 0 13251 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037869259 HTTP/1.1 1-0 17769 0/12/12 _ 1.97 1 1992 13588 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037882258 HTTP/1.1 1-0 17769 0/12/12 _ 1.96 3 1808 13801 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037867259 HTTP/1.1 1-0 17769 0/13/13 _ 1.89 7 1608 13709 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037856259 HTTP/1.1 1-0 17769 0/11/11 _ 1.89 7 1627 13057 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037876259 HTTP/1.1 1-0 17769 0/12/12 _ 1.89 7 1592 14045 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037876260 HTTP/1.1 1-0 17769 0/12/12 _ 1.98 1 1996 13151 0.0 0.94 0.94 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037882259 HTTP/1.1 1-0 17769 39/11/11 W 1.87 1 0 12744 0.0 0.04 0.04 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037863259 HTTP/1.1 1-0 17769 47/11/11 W 1.87 0 0 12058 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /server-status HTTP/1.1 1-0 17769 0/13/13 _ 1.91 6 1227 14262 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037870259 HTTP/1.1 1-0 17769 0/12/12 _ 1.91 6 1252 14176 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037878258 HTTP/1.1 1-0 17769 0/9/9 _ 1.89 7 56 11113 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /server-status?refresh1 HTTP/1.1 1-0 17769 0/11/11 _ 1.93 5 1228 15148 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037879258 HTTP/1.1 1-0 17769 0/12/12 _ 1.93 5 1194 14094 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037872259 HTTP/1.1 1-0 17769 0/10/10 _ 1.91 6 1262 13959 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037864259 HTTP/1.1 1-0 17769 0/13/13 _ 1.93 4 1257 15000 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037865259 HTTP/1.1 1-0 17769 0/12/12 _ 1.94 4 1258 15175 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037866259 HTTP/1.1 1-0 17769 0/12/12 _ 1.94 3 1694 15331 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037873259 HTTP/1.1 1-0 17769 0/12/12 _ 1.91 6 1277 12370 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037871259 HTTP/1.1 1-0 17769 0/12/12 _ 1.96 3 1766 15076 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037874259 HTTP/1.1 1-0 17769 0/12/12 _ 1.96 1 2023 15307 0.0 0.02 0.02 192.168.0.187 http/1.1 127.0.1.1:8000 GET /cgi-bin/config.cgi?getTstate1759037861258 HTTP/1.1
最新发布
09-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值