侧边栏壁纸
博主头像
莫须臾博主等级

莫让时光须臾而过

  • 累计撰写 12 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

各版本HTTP协议 0.9->1.0->1.1->2.0->3.0

莫须臾
2024-03-05 / 0 评论 / 0 点赞 / 26 阅读 / 5019 字

HTTP0.9

它仅仅支持GET这一种请求方式,并且在请求中没有指定协议版本号,而且请求内容中没有请求头和请求体内容。

除此之外,HTTP规定服务器只能响应HTML格式的数据内容,不能响应别的格式的数据内容,因为最初的HTTP是为了提供一种发送和接收HTML页面的方法。目前该版本几乎无人使用。

HTTP1.0

1.支持多种数据类型和格式

除了HTTP0.9版本的HTML文件的传输,HTTP1.0还支持图片、音频、视频等各种文件的传输,让HTTP适应这个互联网时代的发展。0.9版本仅支持ASCII码编码的数据传输。在1.0版本中,HTTP还支持UTF-8、GB2312等多种编码类型,这是HTTP被广泛使用的原因之一。

2.请求和响应的数据格式发生变化

HTTP1.0在数据格式上新增了头部信息,请求中必须携带请求头信息,响应中必须携带响应头信息。该头部信息的设计也为后续的HTTP支持各种功能奠定了基础。比如知识多种编码格式。

HTTP头部结构为“key:value”的形式,key为首部字段名,value为字段值,HTTP有非常多的首部字段,根据用途可以分为以下四种:

通用首部字段:无论请求还是响应都会使用的字段,比如transfer-encoding,host等。

请求首部字段:只有请求才会使用的字段,比如Refer Range等。

响应首部字段:只有响应才会使用的字段,比如Location ETag等。

实体描述首部字段:代表的是请求体或者响应体的某些信息,既可以用于请求头内,也可以用于响应头内,他们是仅针对请求报文和响应报文的实体才会使用的字段,比如content-length。content-type等。

HTTP1.0支持content-encodin、content-length、content-type、expires、last-modified等字段,这些字段都携带了HTTP支持的特性,比如expires,就是为HTTP的缓存功能服务,再比如content-encoding,是为了实现数据处理能力,可以设置gzip、deflate等值来实现数据的压缩处理。除了一些必备字段,HTTP1.0的头部结构还提供了扩展字段,也就是当需要在请求头或者响应头内添加自定义的字段时,HTTP也允许用户自定义设置头部信息。

3.请求方式增强

增加了post 和head这两种请求方式。

除了以上的功能设计,HTTP1.0还新增了统一的状态码、分块传输数据、数据处理能力、用来增强安全性的权限控制、用来缓存已经下载过的数据的缓存功能等。这些功能提升了HTTP在互联网中的受欢迎程度。

HTTP1.1

HTTP1.0的缺点,比如连接无法复用。HTTP1.0默认和客户端与服务端只保持短暂的连接,客户端的每次请求都需要与服务端建立一次TCP连接,服务端完成请求处理返回响应后会与客户端立即断开TCP连接。如果客户端还需要请求其他资源,就必须再建立一个TCP连接。

默认开启连接复用模式

在1.1版本中HTTP支持keep-alive模式(连接复用模式),这种模式也被成为长连接模式,并且默认开启,如果想关闭该模式,则可以通过在HTTP请求头中加入“connection:close”来达到关闭该模式的目的。在1.0版本中如果想开启该模式,那么在请求头内添加“connection:keep-alive”信息就可以开启连接复用模式。连接复用模式可以减少TCP建立连接和断开连接的频率,在一个tcp连接中就可以传送多个HTTP请求和响应,减少了建立和断开连接的消耗和延迟,实现高效的发送请求。

缓存策略增强

HTTP1.0主要使用头部信息中的if-modified-since和expires实现缓存功能,HTTP1.1引入了更多的缓存控制策略,比如Entity tag、if-unmodified-since、if-match、if-none-match等头部字段。

必须传递host信息

由于虚拟主机技术的市场发展,在一台物理服务器上可以存在多个虚拟主机,一次请求需要正确路由到对应的机器上,需要在头部信息内携带主机名信息。

支持资源的选择性访问

有的时候只需要请求资源的某一部分,但由于每次请求都会访问所有的资源,导致网络开销非常大,所以为了实现带宽优化,HTTP1.1在请求头中引入了range,refer等头部字段,他们允许只请求资源的某个部分,这样就方便了用户自由地选择资源以便于充分利用带宽和连接。

头部信息的增强

头部的信息大多数都代表了HTTP提供的特性,前面几点的优化同样体现在头部信息中。在1.1版本中,头部信息增加了许多,也就是HTTP支持的特性也新增了不少,比如上述的连接复用模式。以前发送一次请求,必须重新建立连接,但是现在保持长连接之后,就无法判断一次连接是否已经完成。如果无法判断则会导致两次请求包被当成一次请求来处理,出现解码问题。HTTP通过content-length和transfer-encoding判断一次请求是否完成。当浏览器请求的是一个静态资源时,即服务器明确知道返回内容的长度时,可以设置content-length来控制请求结束,当服务器并不知道请求结果的长度时,就可以通过指定transfer-encoding:chunked来告知浏览器当前的编码是将数据分成一块一块传递的。除此之外,还有许多为也行而设计的头部字段,具体的头部信息可以见HTTP1.1的rfc文档rfc-2616。

请求方式的再增强

又增加了put delete trace options connect patch六种请求方式。

标准错误类型细划

相较于1.0版本,在1.1版本找那个新增了24个错误状态响应码

HTTP1.1比1.0版本的易用性更强,功能也更加完善。虽然HTTP1.1在功能上满足了绝大部分市场需求,但是在性能上并没有太多的优势。比如HTTP1.1中使用连接复用模式时,虽然能共同使用一个连接通道,但是在一个连接通道中同一时刻只能处理一个请求,在当前的请求没有结束前,其他的请求只能处于阻塞的状态。这意味着我们不能随意在一个管道中发送请求和接收内容,这是HTTP1.1典型的对头阻塞问题。也就是说,如果前面的请求因为请求处理时间长延时高,就会阻塞同一链接内后面的请求的正常处理。而在这段时间内,带宽和CPU资源都只能等待,导致资源的浪费。

HTTP2.0

Google内部也采用了HTTP协议,但由于1.1版本还是有传输数据慢的问题,并不能满足当时Google内部的需求,所以Google自行研发了SPDY协议,并与2009年公开了SPDY协议,其设计目的是最小化网络延迟,提升网络速度,解决HTTP1.1效率不高的问题。万维网联盟认为该协议设计的不错,于是将SPDY协议的特性引入HTTP,并于2012年发布了HTTP2,HTTP2 有以下几点突出的技术:

多路复用技术

该技术是HTTP2.0中最重要的特性,多路复用技术实现了在同一个连接下并发发送请求,他解决了HTTP1.1中的队头阻塞问题,当其中的一个请求耗时较大时,不会影响别的请求的正常处理。该技术大大提高了通信传输的效率。

头部信息压缩技术

随着HTTP1.1支持的特性越来越多,头部的内容也越来越大,每次请求和响应的数据包也越来越大,传输的包越大,传输速度也就越慢,所以在HTTP2中对头部信息进行了压缩,以减少传输包的大小,提升网络传输速度。HTTP2的消息头压缩算法采用HPCAK算法。

采用二进制编码进行传输

相比HTTP/1的文本格式,HTTP2采用二进制格式传输数据,解析起来更高效,并且二进制的传输数据格式的数据包更小。

服务端推送技术

以往的版本中只能实现一问一答的模式,也就是只有当客户端发送一个请求时,服务端才能被动的响应改请求,服务端缺乏类似于websocket这样的server push技术,让服务端可以将响应主动推送到客户端缓存中,或者在建立连接后,服务端可以主动推送消息给客户端,HTTP2支持该服务端推送技术,打破了原有的通信模式。

grpc框架就选择了HTTP2作为通信协议。

HTTP3.0

HTTP3.0被称作HTTP over QUIC。HTTP3.0的核心是QUIC(Quick UDP Internet connection),他是由Google在2015年提出的SPDY v3演化而来的新协议,以往的HTTP版本是基于传输层TCP的,但QUIC是基于传输层UDP上的协议。HTTP3.0打破了原有的设计理念,他不在基于TCP。而基于UDP,能够进一步减少TCP三次握手及TLS握手的时间,加快了建立连接的速度。在传输速度上,HTTP3.0已经达到了非常高的程度。但是UDP一直以不可靠传输为特点。会不会因为一味追逐高效而丢失传输的可靠性?答案是不会的。HTTP3.0在UDP的基础上通过重传包来保证传输的可靠性。

虽然HTTP3.0展现出了许多的优势,但是在整个应用环境下,还是面临着许多的挑战,比如目前许多服务器和浏览器都没有对HTTP/3提供比较完整的支持,虽然Chrome浏览器在几年前就开始支持Google版本的quic协议,但是这个版本的quic和官方HTTP3.0的quic差异较大。除此之外部署HTTP3.0也存在非常大的问题。因为系统内核对UDP的优化远远还没有达到对TCP的优化程度,这还需要一段较长的时间进行试验和发展。但是从各个方面的优势来看,HTTP3.0还是可以被期待的。

0

评论区