前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >串行连接、持久连接、管道化持久连接、http/2.0多路复用简介

串行连接、持久连接、管道化持久连接、http/2.0多路复用简介

原创
作者头像
用户8639654
修改2021-08-13 11:22:12
6820
修改2021-08-13 11:22:12
举报
文章被收录于专栏:云计算运维
  • 串行连接: HTTP有无连接的特性,即每次连接只能处理一个请求,收到响应后立即断开连接。HTTP/1.0 版本(称为串行连接或短连接、短轮询)中每次HTTP通信后都要断开TCP连接,所以每个新的HTTP请求都需要建立一个新的连接。但在现在网站动则几十条HTTP请求的情况下,很容易达到浏览器请求上限,并且每次请求都建立新的tcp连接(每次都有三次握手四次挥别)极大的增加了通信开销。
  • 持久连接: 为解决这个问题,有人提出了持久连接(也叫长连接、长轮询)。一定时间内,同一域名下的HTTP请求,只要两端都没有提出断开连接,则持久保持TCP连接状态,其他请求可以复用这个连接通道。HTTP/1.1 实现并默认了所有连接都是持久连接,这样客户端发起多个HTTP请求时就减少了TCP握手造成的网络资源和通信时间的浪费。但是持久连接采用阻塞模式,下次请求必须等到上次响应返回后才能发起,如果上次的请求还没返回响应内容,下次请求就只能等着(就是常说的线头阻塞)。
  • 管道化持久连接: 管道化则可以不用等待响应返回而发送下个请求并按顺序返回响应,现代浏览器并未默认开启管道化。(这方面收集到的资料有限不多说了)
  • HTTP/2.0多路复用: 每个HTTP请求都有一个序列标识符,这样浏览器可以并发多个请求,服务器接收到数据后,再根据序列标识符重新排序成不同的请求报文,而不会导致数据错乱( 细节参照此文)。同样,服务端也可以并发返回多个响应给浏览器,浏览器收到后根据序列标识重新排序并归入各自的请求的响应报文。并且同一个域名下的所有请求都复用同一个TCP连接,极大增加了服务器处理并发的上限。
  • WebSocket: WebSocket是HTML5提出的一种客户端和服务端通讯的全双工协议,由客户端发起请求,建立连接之后不仅客户端可以主动向服务端发送请求,服务端可以主动向客户端推送信息。

看图区分三种链接:

如图中(a):串行连接每次发起请求都必须建立新的tcp连接。

如图中(b):持久连接多个http请求可以复用同一个tcp连接,但是下次请求必须在上次响应返回之后进行。

如图中(c):管道化持久连接也可以复用同一个tcp连接,并且可以不用等待发出多个http请求,但是响应必须按顺序返回。

URI

HTTP协议使用 URI 定位互联网上的资源。概念:

  • URI(Universal Resource Identifier:统一资源标识符)
  • URL(Universal Resource Locator:统一资源定位符)
  • URN(Universal Resource Name:统一资源名称)。

个人理解URI是一个资源文件的不同表示方法的总称。比如一个文件 a.html ,既可以用这个文件的名字 a.html 来表示,也可以用文件路径 www.baidu.com/a.html 来表示,甚至可以用 urn:a:1535-3613 这样的标识符来表示。他们的关系如下:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • URI
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档