HTTP(三):HTTP1.0/1.1/2.0/3.0

简介: HTTP1.0/1.1/2.0/3.0

1. HTTP1.0

HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本

HTTP 1.0 浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接

服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求

简单来讲,每次与服务器交互,都需要新开一个连接

image.png

例如,解析html文件,当发现文件中存在资源文件的时候,这时候又创建单独的链接

最终导致,一个html文件的访问包含了多次的请求和响应,每次请求都需要创建连接、关系连接

这种形式明显造成了性能上的缺陷

如果需要建立长连接,需要设置一个非标准的Connection字段 Connection: keep-alive

2. HTTP1.1

HTTP1.1中,默认支持长连接(Connection: keep-alive),即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟

建立一次连接,多次请求均由这个连接完成
image.png
这样,在加载html文件的时候,文件中多个请求和响应就可以在一个连接中传输

同时,HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间

同时,HTTP1.1HTTP1.0的基础上,增加更多的请求头和响应头来完善的功能,如下:

  • 引入了更多的缓存控制策略,如If-Unmodified-Since, If-Match, If-None-Match等缓存头来控制缓存策略
  • 引入range,允许值请求资源某个部分
  • 引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点

并且还添加了其他的请求方法:putdeleteoptions...

3. HTTP2.0

HTTP2.0在相比之前版本,性能上有很大的提升,添加了如下特性

  • 多路复用
  • 二进制分帧
  • 首部压缩
  • 服务器推送

3.1 多路复用

HTTP/2 复用 TCP 连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”

image.png

上图中,可以看到第四步中cssjs资源是同时发送到服务端

3.2 二进制分帧

帧是HTTP2通信中最小单位信息

HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x的文本格式,解析起来更高效

将请求和响应数据分割为更小的帧,并且它们采用二进制编码

HTTP2中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流

每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装,这也是多路复用同时发送数据的实现条件

3.3 首部压缩

HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送

首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新

例如:下图中的两个请求, 请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销

3.4 服务器推送

HTTP2引入服务器推送,允许服务端推送资源给客户端

服务器会顺便把一些客户端需要的资源一起推送到客户端,如在响应一个页面请求中,就可以随同页面的其它资源

免得客户端再次创建连接发送请求到服务器端获取

这种方式非常合适加载静态资源

image.png

4. HTTP3.0

我们都知道,HTTP是应用层协议,应用层产生的数据会通过传输层协议作为载体来传输到互联网上的其他主机中,而其中的载体就是 TCP 协议,这是 HTTP 2 之前的主流模式。

但是随着 TCP 协议的缺点不断暴露出来, HTTP 3.0 毅然决然切断了和 TCP 的联系,转而拥抱了 UDP 协议,这么说不太准确,其实 HTTP 3.0 其实是拥抱了 QUIC 协议,而 QUIC 又被叫做快速 UDP 互联网连接,QUIC的一个特征就是快。

QUIC 具有下面这些优势

  • 使用 UDP 协议,不需要三次连接进行握手,而且也会缩短 TLS 建立连接的时间。
  • 解决了队头阻塞问题。
  • 实现动态可插拔,在应用层实现了拥塞控制算法,可以随时切换。
  • 报文头和报文体分别进行认证和加密处理,保障安全性。
  • 连接能够平滑迁移。

image.png

5. 总结

HTTP1.0:

  • 浏览器与服务器只保持短连接,浏览器的每次请求都需要与服务器建立一个TCP连接。

HTTP1.1:

  • 引入了长连接,即TCP连接默认不关闭,可以被多个请求复用
  • 引入pipelining管道技术,在同一个TCP连接里面,客户端可以同时发送多个请求,但有队头阻塞问题。
  • 新增了一些请求方法
  • 新增了一些请求头和响应头

HTTP2.0:

  • 采用二进制格式而非文本格式
  • 多路复用TCP连接,在一个链接上客户端或服务器可同时发送多个请求或响应,避免了队头阻塞问题(只解决粒度级别为http request的队头阻塞)
  • 使用报头压缩,降低开销
  • 服务器推送

HTTP3.0

  • 利用QUIC作为底层支撑协议,其融合UDP协议的速度、性能与TCP的安全可靠。
  • 彻底解决了队头阻塞问题
  • 连接建立更快
  • 支持连接迁移
相关文章
|
存储 缓存 网络协议
Http1.0和Http1.1的区别?Http1.1和Http2.0的区别
Http1.0和Http1.1的区别?Http1.1和Http2.0的区别
231 1
|
缓存 网络协议 安全
Android网络面试题之Http基础和Http1.0的特点
**HTTP基础:GET和POST关键差异在于参数传递方式(GET在URL,POST在请求体),安全性(POST更安全),数据大小限制(POST无限制,GET有限制),速度(GET较快)及用途(GET用于获取,POST用于提交)。面试中常强调POST的安全性、数据量、数据类型支持及速度。HTTP 1.0引入了POST和HEAD方法,支持多种数据格式和缓存,但每个请求需新建TCP连接。**
172 5
|
缓存 网络协议 开发者
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
1843 0
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
|
缓存 网络协议 前端开发
【计算机网络】HTTP1.0、HTTP1.1 和 HTTP2.0的详细分析
目录前言HTTP1.0HTTP1.1HTTP2.0总结 前言 在1.0时代中,html从Web服务器传送到客户端。 在2.0时代中,多了一些css,js等前端语言的更新。 影响http的两个主要因素有:带宽以及延迟 网络拨号更加影响带宽 延迟的话主要通过:一个主机中浏览器对同个域名的链接限制、dns的解析时长、三次握手的连接时长等 HTTP1.0 主要用在简单的网页和浏览器中 具体的一个模式为: 建立连接 发出请求信息 响应信息 关掉连接 存在一个带宽的浪费,比如传输一部分数据,却传输了整个对象进
585 1
【计算机网络】HTTP1.0、HTTP1.1 和 HTTP2.0的详细分析
|
缓存 网络协议 C++
HTTP1.0 vs HTTP1.1 vs HTTP2.0
HTTP1.0 vs HTTP1.1 vs HTTP2.0
226 0
|
Web App开发 存储 缓存
探索http1.0到http3.0的发展史,详解http2.0
实例代码探索http1.0到http3.0的发展史,详细拆解http2.0,队头阻塞的解决方案,分层帧,多路复用,传输层的伟大变革
410 0
探索http1.0到http3.0的发展史,详解http2.0
|
Java Apache
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
hbase从集群中有8台regionserver服务器,已稳定运行了5个多月,8月15号,发现集群中4个datanode进程死了,经查原因是内存 outofMemory了(因为这几台机器上部署了spark,给spark开的...
910 0

热门文章

最新文章

下一篇
oss云网关配置