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

打印 上一主题 下一主题

主题 507|帖子 507|积分 1521


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:
  1. Connection: keep-alive
复制代码
例如,curl库默认设置,大概在频繁哀求时:
  1. # 客户端发送带有 Connection: keep-alive
  2. 消息头的哀求,保持连接不绝开。GET /somewhere/fun HTTP/1.1Host: origin.example.comConnection: keep-alive
复制代码
通过设置Connection: keep-alive
,可以避免频繁的连接建立和关闭,提高性能。
3 验证与性能提升

原有:
  1. [2023-03-05 09:38:02.209924][INFO][pid:2883,tid:2882][httpclient_keeplive.cpp:138][0b43001309a6] RequestHttps h.last_active_time: 1717551479, h: 1393928, tc_ts:565
复制代码
优化后:
  1. [2023-03-05 09:39:03.715435][INFO][pid:2883,tid:2882][httpclient_keeplive.cpp:138][0b43000d097e] RequestHttps h.last_active_time: 1717551543, h: 1393910, tc_ts:182
复制代码
实测数据显示,启用长连接后, HTTP哀求的平均耗时明显下降,TCP连接建立和关闭的开销大大淘汰。
4 总结

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表