当前位置: 首页 / 技术干货 / 正文
Http是短连接还是长连接

2023-05-10

上海 青岛

  1. 前言

  最近很多小伙伴在跳槽面试.

  在面试中, 面试官说: 我们做web开发离不开http协议, 那么你了解http协议吗?

  大家都答的是了解.

  然后面试官接着问Http协议是长连接还是短连接? 如何实现的?

  然后小伙伴们就各种支支吾吾的, 这次面试就结束了........

  小伙伴既然来问,在这里为大家来统一讲解这个问题.

Http是短连接还是长连接

  2. 面试题考点

  如果面试官是千锋健哥的话, 那么我想考的就是看看候选人对计算机网络的了解程度. 基础是否扎实. 主要考点如下:

  Http协议处于OSI网络模型的哪一层?

  Http协议底层是如何实现的? 也就是位于传输层用的是什么协议?

  Http协议到底是长连接还是短连接?

  TCP协议的三次握手和四次挥手过程?

  3. 解题分析

  下面来带大家一起分析下这个问题的解题思路:

  3.1. HTTP协议与TCP/IP协议的关系

  HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。

  3.2. 如何理解HTTP协议是无状态的

  HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

  3.3. 什么是长连接、短连接?

  在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

  但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive

  在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

  3.4. HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

  TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要3次握手的,而释放则需要4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗.

  三次握手建立连接 , 四次挥手关闭连接短连接的操作步骤是:建立连接—>数据传输—>关闭连接 ... 建立连接—>数据传输—>关闭连接长连接的操作步骤是:建立连接—>数据传输 ...(保持连接)... 数据传输—>关闭连接

  3.5. tcp三次握手四次挥手过程

  先向HTTP服务器发起TCP的确认请求(三次握手)客户端 --> SYN --> 服务器服务器 --> SYN+ACK --->客户端客户端 --> ACK --> 服务器

  客户端要和服务器断开TCP连接(四次挥手)客户端 --> FIN +ACK ---> 服务器服务器 --> FIN ---> 客户端服务器 --> ACK --> 客户端客户端 --> ACK ---> 服务器

  4. 总结

  经过上面的分析最后千锋健哥来给大家总结下这个问题的完整答案 :

  Http协议是长连接还是短连接看协议版本, Http1.0是默认短连接, Http1.1是默认长连接.

  Http协议位于OSI网络模型的应用层

  Http协议底层在传输层上使用的是TCP协议, 在网络层使用的是IP协议. TCP协议具有三次握手四次挥手过程, 传输数据安全稳定.

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号