一. 考题再现
最近很多小伙伴在跳槽面试,遇到了各种奇奇怪怪的问题。比如健哥的一个学生,在面试时被面试官问到如下问题:
“我们做web开发都离不开http协议, 那你了解http协议吗?”
这时大家一般都是回答了解。
然后面试官会接着对这个问题展开三连击,“Http协议是长连接还是短连接? 具体如何实现的?......”
然后有些小伙伴就开始支支吾吾答不出来了,然后这次面试就over了........
那如果你也遇到了这些问题,该怎么回答呢?今天健哥就在这里为大家来统一讲解这些问题该怎么回答,带你轻松破解面试官的无情三连!
二. 题目剖析
其实面试就是考试,我们要摸清对方的考察意图!如果面试官是千锋健哥的话,那么我想考的就是看看候选人对计算机网络的了解程度,网络基础是否扎实,本题的主要考点如下:
- Http协议处于OSI网络模型的哪一层?
- Http协议底层是如何实现的?
- 位于传输层用的是什么协议?
- Http协议到底是长连接还是短连接?
- TCP协议的三次握手和四次挥手过程?
三. 分析破解
针对上面健哥为大家抽离出的考察要点,接下来我就为大家针对上述考点一一分析破解,下面就是这个问题的解题思路与过程:
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协议的长连接和短连接
我们所谓的HTTP协议的长连接和短连接,实质上是指TCP协议的长连接和短连接!所以这里健哥要跟大家再唠唠TCP连接是怎么回事。
TCP连接:当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接。当读写操作完成后,双方不再需要这个连接时,它们就可以释放这个连接,而连接的建立是需要进行3次握手的,释放则需要进行4次挥手,所以每个连接的建立都是需要消耗资源和时间的。
3.5 TCP三次握手和四次挥手过程
既然上面我们说到了三次握手和四次挥手,健哥就再扩展一下说说这两个操作的实现过程。
三次握手:先向HTTP服务器发起TCP的确认请求
- 客户端 --> SYN --> 服务器
- 服务器 --> SYN+ACK --->客户端
- 客户端 --> ACK --> 服务器
四次挥手:客户端要和服务器断开TCP连接
- 客户端 --> FIN +ACK ---> 服务器
- 服务器 --> FIN ---> 客户端
- 服务器 --> ACK --> 客户端
- 客户端 --> ACK ---> 服务器
四. 总结
经过上面的分析,最后千锋健哥来给大家总结下这个问题的完整答案 :
- Http协议到底是长连接还是短连接,要看HTTP协议的版本,Http1.0中默认是短连接,Http1.1中默认是长连接;
- Http协议位于OSI网络模型的应用层;
- Http协议底层在传输层上使用的是TCP协议,在网络层使用的是IP协议;
- TCP协议具有三次握手和四次挥手的过程,传输数据安全稳定。