小小小幸运 发表于 2024-6-20 19:39:40

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

https://img-blog.csdnimg.cn/direct/783bb0c8f5204fc595dce2cae3095cfa.png
0 序言

0.1 由来

Connection头部字段在HTTP/1.1中被引入,重要用于控制网络连接的持久性。最常见的值是keep-alive和close。当使用keep-alive时,TCP连接在一次哀求/相应之后不会立刻关闭,允许复用连接以处理处罚后续哀求。如允许以明显淘汰TCP连接的建立和终止带来的开销。
可以将Connection: keep-alive
机制比作一条常开的热线电话:

[*]情景设定:

[*]你需要频繁打电话给朋侪,但每次都要重新拨号和挂断。

[*]正常流程:

[*]每次需要联系朋侪时,你拨通电话,交换完毕后挂断。

[*]使用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-alive和close。
规范中规定,Connection: keep-alive
表现哀求结束后保持连接不绝开,允许复用连接。相反,Connection: close则表现哀求结束后立刻关闭连接。
例如,如果使用keep-alive,服务器在处理处罚完第一个哀求后不会关闭连接,而是继续等候下一个哀求。
       在持久连接中,Connection头可以明显影响哀求的性能。默认情况下,HTTP/1.1会使用keep-alive,但明确设置可以确保行为一致。
客户端发送带有Connection: keep-alive
头的哀求,服务器在相应后保持连接不绝开,等候后续哀求。这种机制可以淘汰连接建立和关闭的开销,提高性能。
   在HTTP长连接(持久连接)中,客户端与服务器之间会复用同一个TCP连接以发送多个哀求/相应对话。这通常会明显降低延迟和资源消耗。
留意: Connection: keep-alive
机制与连接的长短无关。无论是短连接还是长连接,当客户端发送一个包含keep-alive头的哀求时,都会触发保持连接的机制。
2 语法 && 通过设置Connection: keep-alive
优化性能

现在规范中规定的值包括keep-alive和close:
Connection: keep-alive
例如,curl库默认设置,大概在频繁哀求时:
# 客户端发送带有 Connection: keep-alive
消息头的哀求,保持连接不绝开。GET /somewhere/fun HTTP/1.1Host: origin.example.comConnection: keep-alive
通过设置Connection: keep-alive
,可以避免频繁的连接建立和关闭,提高性能。
3 验证与性能提升

原有:
RequestHttps h.last_active_time: 1717551479, h: 1393928, tc_ts:565
优化后:
RequestHttps h.last_active_time: 1717551543, h: 1393910, tc_ts:182
实测数据显示,启用长连接后, HTTP哀求的平均耗时明显下降,TCP连接建立和关闭的开销大大淘汰。
4 总结

通过正确管理Connection头,尤其是使用Connection: keep-alive
,可以避免频繁的连接建立和关闭,从而淘汰哀求的团体耗时,提升性能。
References


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【CS.CN】深入探究下HTTP的Connection头:通过keep-alive实现高效网络连接