HTTP说明

HTTP的特点

  • 基于tcp/ip、一种网络应用层协议、超文本传输协议HyperText Transfer Protocol
  • 工作方式:客户端请求服务端应答的模式
  • 快速:无状态连接
  • 灵活:可以传输任意对象,对象类型由Content-Type标记
  • 客户端请求request消息包括以下格式:请求行(request line)、请求头部(header)、空行、请求数据

HTTP/0.9

  • 仅仅有GET一种方式。当时的需求很简单,就是用来传输学术上体积很小的 HTML 文件。
    • 只有请求行,没有后来熟悉的请求头,请求体
    • 同理,服务端只是返回数据,没有响应头,响应体这些东西

HTTP/1.0

  • 版本发布,内容大大增加。增加了POST和HEAD命令。可以发送任何形式的内容,也规定了请求和响应格式。

HTTP/1.1

  • 长连接
    • 默认使用长连接,长连接就是一次连接,连接期内多次发送请求。
    • 相比于1.0 每一次请求都要进行tcp三次握手,节省了大量时间。
    • 长连接的请求时长可以在请求头中的keep-alive中设置
  • 管线化
    • 在HTTP/1.0时,只有前一次的请求发出,并得到服务器端的响应。
    • 第二次的请求才可以发出去。
    • 而在HTTP/1.1管道机制规则下,可以一次同时向服务端发出去多个请求。
    • 当然了,管线化,也有自己的缺陷。
    • 虽然是一次性发出多个,但是服务端在响应的时候还是按照请求顺序响应。
    • 这就有可能出现,前面的某个请求的响应时间很长,后面就会有很多的请求排队等候。
    • 这个现象也称为队头阻塞。
  • 虽然可以整批发送请求,不过服务器依然需要根据请求顺序来回复浏览器的请求。
    • 支持断点续传,通过请求头中的 range 来实现
    • 新增了缓存标识。E-tag,if-match,if-none-match
  • 缺点
    • 队头阻塞
    • 请求头信息太多
    • 多次请求,请求头重复信息太多
    • 请求没有优先级
    • 只有客户端请求- 服务端响应这个模式

HTTP/2.0

  • HTTP/2.0标准在2015年发布,针对 HTTP/1.1 做出了如下的改变:
  • 多路复用
    • 大家都知道HTTP/1.1 为每个域名维护了多个TCP连接,那为什么还要搞多路复用?
      • 想知道答案的可以看我上一篇文章一个域名究竟可以维护多少个TCP连接???,里面有详细的解答。
    • 一个连接中并发多个请求或回应,而不用按照顺序一一对应。降低了延迟,大幅度提高了连接的利用率。
    • 多路复用,每一个请求都对应一个ID。
      • 这样,我们的请求就可以分开了,响应也可以打包混合运送,之所以敢这样,就是每一个响应包裹,都有对应ID,客户端收到之后,可以根据自己ID,将数据组合。
    • 又因为有了多路复用,我们的请求优先级也可以用到了,遇到优先级高的,可以将当前的响应立马停止,转而去处理优先级高的请求。
  • 头部压缩
    • 同时发送多个请求,头部会帮我们消除重复的部分。这就是HPACK算法。
      • 客户端,服务端同时维护一张头信息表,所有的字段都会存入这张表,生成索引号码,每一次仅仅发送索引号码就可以了。
      • 这样在网络上传输就会更快。
  • 二进制格式
    • HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式。
    • 过这种形式对人不友好,对计算机友好。省去了计算机收到报文后,转换成二进制的过程。增加了数据传输的效率
  • 数据流
    • HTTP/2 的数据包不是按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。
      • 客户端发送的编号是奇数,服务端发出的偶数。客户端可以指定数据流的优先级,优先级高的请求,服务端就先响应其请求。
  • 服务器推送
    • 服务端可以主动向客户端发送消息。这样好处,就是那种我预判了你的预判的那种感觉。理解为性能优化中的预加载。
  • 缺点
    • 多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。
      • 所以一旦发生丢包现象,就会触发TCP的重传机制,这样一个TCP连接中的所以请求都必须等待这个丢失的包重新传回来。
    • 虽然 HTTP/2.0 解决了 HTTP/1.1 中的队头阻塞问题,但是 HTTP/2.0 依然是基于 TCP 协议的,所以上上面描述的情况已经存在。
    • 因为HTTP/1.1 是多车道,一条对头阻塞了,还有其他的可以请求传输。
      • 而我们的HTTP/2.0是单车道,如果因为丢包堵塞,那么就真的是堵塞了。
      • 如果堵塞时间长(丢包多),当系统达到了 2% 的丢包率时,HTTP/1.1 的传输效率反而比 HTTP/2 表现得更好。

HTTP/3.0

  • 多次提到了TCP丢包,TCP丢包。
    • 从TCP的角度来看,HTTP/2.0 已经可以算是他的巅峰了,已经很难优化了。既然得不到,那就只有毁灭他了。
    • 所以HTTP/3.0 有了一个新的协议 QUIC。
    • 但是目前各种厂商的中间设备仅支持TCP和UDP协议,那么我们只能退而求其次,传输层选用UDP,顶层加入其他算法,使其既有TCP的稳定,还能保证UDP的传输。
  • 思考一下,QUIC的内容,既要有HTTP/2.0的优点,又要去掉他的缺点,那么:
    • QUIC 实现类似于 TCP 的保证传输的可靠性。也就是在UDP的基础上自己实现一套数据丢包重传机制,并且有多个通道传输内容,当一个通道堵塞,不影响其他通道
    • TLS(https安全协议)升级到1.3
    • 减少合并,连接开启前的握手

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.A new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your teamhttps://serious-lose.notion.site/HTTP-ddfa06b0b489445db8ba2f78d68ee72c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值