HTTP介绍以及演变

HTTP基本概念:超文本-传输-协议

是在计算机世界中两点之间传输文字,图片,视频等超文本数据的约定和规范。

HTTP 0.9版本:只有get请求,发出的请求没有请求头,没有版本号。已弃用

HTTP 1.0版本:新增了多种请求方式,新增了状态码:分别是信息响应(1XX),成功响应(2XX)、重定向响应(3XX)、客户端错误响应(4XX)和服务端错误响应(5XX),定义了消息头部等。存在的问题:每次发起一个请求都要新建一次TCP连接(三次握手)。而且是串行请求,做了无畏的TCP连接以及断开,增加通信开销。

HTTP 1.1版本:新增长连接通信方式,减少了TCP连接的重复建立和断开所造成的开销。可以在同一个TCP连接中,客户端可以发起多次请求,不必等其回来,就可以发送第二个请求。但是服务器还是按照顺序回应,因此存在队头阻塞问题:第一个请求处理的非常慢,即使第二个请求能够很快处理也不会去处理,导致客户端一直收不到数据。性能瓶颈:

  • 请求头部未压缩就发送,只能压缩body部分。
  • 请求时可能发送相同的头部,浪费较多。
  • 服务器按顺序响应请求,如果服务慢则客户端一直收不到数据。
  • 请求时没有优先级控制。
  • 请求只能客户端请求,服务端被动相应。

HTTP 2.0版本:基于HTTPS,因此安全性也有了保障。2.0会压缩头部,如果同时发出多个请求,请求头是一样的,那么就会消除重复的部分,消除原理:在客户端和服务端同时维护了一张头信息表,所有字段都会存入这个表,生成索引号,以后不用发送相同字段,只需要发送索引号。2.0的报文采用二进制格式,头信息和数据都是二进制,统称为帧。相比于1.1文本形式增加了传输效率。每个请求或回应的数据称为数据流。每个数据流都有独一无二的编号,规定客户端发出的流编号为奇数,服务端为偶数。客户端可以指定流的优先级,优先级高的服务器优先响应。多路复用:在一个连接中并发多个请求或回应,而不是按照顺序一一对应。也就不会出现1.1中的对头阻塞问题,降低延迟,大幅度提高连接利用率。服务端也可以主动推送消息给客户端。举例来说,在浏览器刚请求 HTML 的时候,就提前把可能会用到的 JS、CSS 文件等静态资源主动发给客户端,减少延时的等待。存在缺陷:

  • HTTP工作在应用层,多个HTTP请求复用一个TCP连接,下层的TCP不知道有多少请求复用,一旦发生了丢包现象,就会触发重传机制,此时所有HTTP请求都会等待丢失的包被重传回来。导致HTTP请求阻塞。

HTTP 3.0版本:为了解决2.0版本中的问题,3.0的下层采用UDP,因为UDP不管顺序以及是否到达,所以不会出现一个丢包全部重传问题。但是UDP是不可靠传输,还需要基于QUIC协议来实现类似TCP的可靠性传输。QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值