阅读 139

HTTP长连接、短连接究竟是什么?

1. HTTP协议与TCP/IP协议的关系
HTTP的长连接和短连接本质上是TCP长连接和短连接,HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
IP协议主要解决网络路由和寻址问题,
TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。
2. 如何理解HTTP协议是无状态的
HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。
3. 什么是长连接、短连接? 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web
资源
(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久
保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接,
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
4、HTTP、Socket、TCP的区别 
这三个概念经常被谈到,也是比较容易被混掉的概念。在回顾之前我们先看一下这三者在TCP
/IP协议族中的位置关系: HTTP是应用层的协议,更靠近用户端;TCP是传输层的协议;而socket是从传输层
上抽象出来的一个抽象层,本质是接口。所以本质上三种还是很好区分的。尽管如此,有时候你可能会懵逼,HTTP连接、TCP连接、socket连接有什么区别?好吧,如果上面的图解释的还是不够清楚的话,
我们继续往下看。

4.1
TCP连接与HTTP连接的区别:上文提过,HTTP是基于TCP的,客户端往服务端发送一个HTTP请求时第一步就是要建立与服务端的TCP连接,也就是先三次握手,“你好,你好,你好”。从HTTP
1.1开始支持
持久连接,也就是一次TCP连接可以发送多次的HTTP请求。
小总结:HTTP基于TCP
4.2
TCP连接与Socket连接的区别: 在图4.1中我们提到,socket层只是在TCP
/UDP传输层上做的一个抽象接口层,因
此一个socket连接可以基于连接,也有可能基于UDP。基于TCP协议的socket连接同样需要通过三次握手建立连接,是可靠的;基于UDP协议的socket连接不需要建立连接的过程,不过对方能不能收到都会
发送过去,是不可靠的,大多数的即时通讯IM都是后者。
小总结:Socket也基于TCP
4.3
HTTP连接与Socket连接的区别: 区分这两个概念是比较有意义的,毕竟TCP看不见摸不着,HTTP与Socket是实实在在能用到的。 HTTP是短连接,Socket(基于TCP协议的)是长连接。尽管HTTP1.1
开始支持持久连接,但仍无法保证始终连接。而Socket连接一旦建立TCP三次握手,除非一方主动断开,否则连接状态一直保持。 HTTP连接服务端无法主动发消息,Socket连接双方请求的发送先后限制。
这点就比较重要了,因为它将决定二者分别适合应用在什么场景下。HTTP采用“请求
-响应”机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回
复在后。Socket连接双方类似peer2peer的关系,一方随时可以向另一方喊话。
4.4
问题来了:什么时候该用HTTP,什么时候该用socket: 这个问题的提出是很自然而然的。当你接到一个与另一方的网络通讯需求,自然会考虑用HTTP还是用Socket。 用HTTP的情况:双方不需要时刻保持
连接在线,比如客户端资源的获取、文件上传等。 用Socket的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等

原文链接:https:
//blog.csdn.net/min996358312/article/details/68969519/

 

原文:https://www.cnblogs.com/red-star/p/15055373.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐