http协议

目录

一、定义

二、http工作流程

三、http1、http2

1.http1

a.http1.0

b.http1.1

2.http2

头部压缩-HPACK算法

二进制帧

并发传输

一、定义

HTTP(HyperText Transfer Protocol),是超文本传输协议,是目前互联网上要用最广泛的一种网络协议,所有的 WWW文件都必须遵守该标准。HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。

二、http工作流程

说法一

  • 建立起客户机和服务器连接。
  • 建立连接后,客户机发送一个请求给服务器。
  • 服务器收到请求给予响应信息。
  • 客户端浏览器将返回的内容解析并呈现,断开连接。

说法二

        域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

  connection :keep-alive 可以保持长连接

三、http1、http2

1.http1

a.http1.0

                默认短连接,每次请求都必须建立一次连接,通过tcp三次握手后开始传输数据,连接结束进行四次挥手断开连接。

        缺点:连接无法复用,每次都需要重新连接增大开销

        优点:

b.http1.1

特点:

  • 默认长连接,通过Keep-Alive保持HTTP连接不断开,避免重复建立TCP连接
  • 管道化,通过长连接实现在一个连接中传输多个文件
  • 加入缓存处理(新字段cache-control)
  • 支 持断点续传
  • 增加了Host字段,实现了在一台WEB服务器上可以同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点

优化也带来了性能性问题-高延迟;比如请求-响应模型、头部巨大且重复、并发连接耗时、服务器不能主动推送等,

2.http2

         第一点,HTTP/2 没有在 URI 里引入新的协议名,仍然用「http://」表示明文协议,用「https://」表示加密协议,于是只需要浏览器和服务器在背后自动升级协议,这样可以让用户意识不到协议的升级,很好的实现了协议的平滑升级。

        只在应用层做了改变,还是基于 TCP 协议传输,应用层方面为了保持功能上的兼容,HTTP/2 把 HTTP 分解成了「语义」和「语法」两个部分,「语义」层不做改动,与 HTTP/1.1 完全一致,比如请求方法、状态码、头字段等规则保留不变。

  但是,HTTP/2 在「语法」层面做了很多改造,基本改变了 HTTP 报文的传输格式。

头部压缩-HPACK算法

HPACK 算法主要包含三个组成部分:

    • 静态字典;

    • 动态字典;

    • Huffman 编码(压缩算法);

  客户端和服务器两端都会建立和维护「字典」,用长度较小的索引号表示重复的字符串,再用 Huffman 编码压缩数据,可达到 50%~90% 的高压缩率

二进制帧

HTTP/2 厉害的地方在于将 HTTP/1 的文本格式改成二进制格式传输数据,极大提高了 HTTP 传输效率,而且二进制数据使用位运算能高效解析。HTTP/2 把响应报文划分成了两个帧(Frame),图中的 HEADERS(首部)和 DATA(消息负载) 是帧的类型,也就是说一条 HTTP 响应,划分成了两个帧来传输,并且采用二进制来编码。

并发传输

 在http1中如果使用多线程建立多个连接,从而同时处理多个请求,但是同一个域名下浏览器可以建立的连接数有限,一般是6个,也就是最多同时可以发送6个请求,即使采用的资源分片技术,这样也会有一些其它的问题,例如:

  • 每一个线程都需要占用一定的系统资源
  • 对各连接会将大量的实践花费在TCP连接上,如果使用的是HTTPS还存在着TLS验证的时间浪费。
  • 对个TCP连接也可能会造成整个网络环境的拥塞,最终导致整个吞吐量的下降

        我们都知道 HTTP/1.1 的实现是基于请求-响应模型的。同一个连接中,HTTP 完成一个事务(请求与响应),才能处理下一个事务,也就是说在发出请求等待响应的过程中,是没办法做其他事情的,如果响应迟迟不来,那么后续的请求是无法发送的,也造成了队头阻塞的问题。

在HTTP/2对上述问题进行解决,实现并发传输。

        HTTP/2 通过 Stream 这个设计,多个 Stream 复用一条 TCP 连接,达到并发的效果,解决了 HTTP/1.1 队头阻塞的问题,提高了 HTTP 传输的吞吐量,在1.1版本中的难点是接收方无法区分收到的数据包属于哪一个请求,而流标识就很好的解决了这个问题,而且只使用一条TCP连接就实现的多路复用。

详细连接:

​​​​​​cHTTP/2与HTTP/1的比较 - Mr-xxx - 博客园 (cnblogs.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值