HTTP1.0和HTTP1.1版本—-长连接、短连接

  • Post author:
  • Post category:其他


概念

长连接和短连接主要是指HTTP协议中的两个版本http1.0和http1.1的区别之一,但实际上也是TCP协议的长连接和短连接。

1,TCP是长连接,UDP是短连接?

答:

长/短连接都是在TCP的前提下来说的,因为UDP没有连接的概念。

UDP Client不需要与Server建立连接,它只需要在需要的时候发一个包出去就可以了。所以,更准确地说法应该是:TCP长连接、TCP短连接。

2,TCP是长连接,HTTP是短连接?

答:误以为TCP只能是长连接。我们再说一遍,TCP的连接有长有短。另外,HTTP 1.0确实是短连接,但是,HTTP 1.0加入了keepalive之后,也可以实现长连接。再到后来,出现了websocket,就是

默认

长连接的协议。


HTTP1.1规定了默认保持

长连接

(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,相反的就是

短连接,

它只支持短连接。

HTTP 1.0规定浏览器与服务器只

保持短暂的连接

,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

HTTP 1.1则支持

持久连接

Persistent Connection, 并且默认使用persistent  connection。在同一个tcp的连接中可以传送多个HTTP请求和响应。多个请求和响应可以重叠,多个请求和响应可以同时进行。更加多的请求头和响应头(比如HTTP1.0没有host的字段)。

会话方式

在1.0时的会话方式:                                                           在1.1时的会话方式:

1. 建立连接                                                                          1. 建立连接

2. 发出请求信息                                                                   2. 发出请求信息                             3. 回送响应信息                                                                   3. 回送响应信息

传输数据                                                                                  传输数据

4. 关掉连接                                                                          4. 保持连接

5. 建立连接                                                                         5. …..

6. 发出请求信息

7. 回送响应信息

传输数据

8. 关掉连接                                                                          8.关掉连接

客户端的长连接不可能无限期的拿着,会有一个超时时间,服务器有时候会告诉客户端超时时间,例如:Keep-Alive: timeout=20,表示这个TCP通道可以保持20秒。另外还可能有max=XXX,表示这个长连接最多接收XXX次请求就断开。对于客户端来说,如果服务器没有告诉客户端超时时间也没关系,服务端可能主动发起

四次握手

断开TCP连接,客户端能够知道该TCP连接已经无效;另外TCP还有

心跳包

来检测当前连接是否还活着,方法很多,避免浪费资源。

长连接和短连接的优缺点:

1)长连接可以省去较多建立连接和关闭连接的操作,比较节省资源和时间,但长连接如果一直存在的话,需要很多探测包的发送来维持这个连接;对服务器将是很大的负荷相对而言,

2)短连接则不需要服务器承担太大负荷,只要存在的连接就都是有用连接,但如果客户端请求频繁,就会在TCP的建立连接和关闭连接上浪费较大的资源和时间。

最后什么时候使用长连接和短连接呢?

长连接:

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况

。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,处理时直接发送数据包就好,不用建立 TCP 连接。(例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成 socket 错误,而且频繁的 socket 创建也是对资源的浪费。)

短连接:网站的 http 服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,例如:类似WEB 网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,服务器负荷很大,并发量大,但每个用户无需频繁操作情况下需用短连接好。


接下来给大家简单讲一下http1.0和http1.1的几个特点:

HTTP 1.1的功能

需要增加新的请求头来帮助实现,例如,Connection请求头的值为

Keep-Alive

时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为

close

时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了

与身份认证、状态管理和Cache缓存等机制

相关的请求头和响应头。

请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。  HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但

服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。


HTTP 1.1增加host字段

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

100(Continue) Status(节约带宽)

HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,

允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。



版权声明:本文为IT_Bonnie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。