什么是 http?什么是 http2?说下 http 和 http2 的工作流程?

什么是 http?

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最广泛的一种网络协议。所有的 www 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。

什么是 http2?

HTTP2 的优势,采用二进制协议:

  • 头部压缩:HTTP2 消息头采用 HPACK 格式进行压缩传输,并对消息头建立索引表,相同的消息头只发送索引号,从而提高效率和速度。

  • 多路复用:在 HTTP2 中,不用按照次序 一 一 对应,而且并发的多个请求或响应中任何一个请求阻塞了不会影响其他的请求或者响应,这样就避免了"队头阻塞"

  • 服务器推送:在 HTTP2 中服务器未经请求可以主动给客户推送资源,大大提高了网页加载的速度

  • 安全:HTTPS 将是未来的趋势,HTTP2 基于 HTTPS 也是未来的趋势,安全也是 HTTP2 的重要特性之一

http 与 http2 的工作流程

http 的工作流程

每个万维网的网点都有一个服务器进程,它不断的监听 TCP 端口 80,以便发现是否有浏览器向它发出监听请求,一旦监听到连接建立请求,就通过三次握手建立 TCP 连接,然后浏览器就会向服务器发出浏览某个页面的请求,服务器接着返回所请求的页面作为响应,然后 TCP 连接就被释放了。

用户 <=====> 服务器

  • http 使用 TCP 连接

  • 建立 TCP 连接

  • 用户发送 http 请求

  • 服务器响应 http 请求

  • 释放 TCP 连接

这些响应和请求报文都遵循一定的格式,这就是 HTTP 协议所规定的。

http2 的工作流程

http2 协议是一个二进制协议,二进制更易于 frame(帧 数据包)的实现,http2 有几个不同 frame 定义,其中两个最基础的对应于 HTTP1.1 的---Data 数据和 HEADE 头部

  • frame 是包含几个部分:类型 Type,长度 Length,标记 Flags,流标识 Stream 和 frame payload 有效载荷

  • 流标识是描述二进制 frame 的格式,使得每个 frame 能够基于 http2 发送,与流标识联系的是一个流,每个流都是一个逻辑联系,一个独立的双向的 frame 存在于客户端和服务器端之间的 http2 连接中。一个 http2 连接上可包含多个并发打开的流,这个并发流的数量能够由客户端设置,这些流可能是打散了通过物理连接传输。

头部压缩

HTTP 是一个无态协议,也就是说,每个请求必须携带更多细节,以便服务器能够识别从而服务这个请求,这些都无需服务器自己保存太多信息以及先前请求的元数据信息,HTTP2 没有改变这个范式。但是这种方式会产生重复信息,当一个客户端向相同服务器请求许多资源时,像来自同一个网页的图像,将会有大量的请求看上几乎同样的,这就需要压缩技术对付这种几乎相同的信息。HTTPS 和 SPDY 的压缩被发现容易导致 BREACH4 和 CRIME 攻击。因此压缩不是一个简单的课题,HPACK6 是 HTTP/2 的头部压缩。

随时复位

HTTP1.1 一个缺点就是当 HTTP 信息有一定长度大小数据传输时,你不能方便地随时停止它,中断 TCP 连接的代价是昂贵的。使用 HTTP2 的 RST_STREAM 将能方便停止一个信息传输,启动新的信息,在不中断连接的情况下提高带宽利用效率。

服务器端推

客户端请求一个资源 X,服务器端判断也许客户端还需要资源 z,在无需事先询问客户端情况下将资源 z 推送到客户端,客户端接收到后,可以缓存起来已备后用。

流程控制

HTTP2 的每个独立流都有自己的流程控制 flow controller,每个流两端都必须告诉对方自己有更多空间适合数据存放,另外一端只能允许发送更多数据直至流 flow 窗口被扩展,类似 SSH 工作风格,只有 DATA frame 是流程控制的。

posted on 2021-12-06 10:49  bala001  阅读(996)  评论(0编辑  收藏  举报

导航