HTTP协议各版本差异

http协议介绍

    http(Hypertext transfer protocol)超文本传输协议,它是互联网上应用最为广泛的一种网络协议,工作在应用层。基于TCP协议(传输层)之上,规定WWW服务器 , 是浏览器之间信息传递规范。使用的默认端口号为80端口。https默认端口是443

http协议发展

   http协议目前有4个版本,其中1.0、1.1版本在互联网上被广泛使用,2.0版本目前应用很少,是下一代的http协议。

  http/0.9版本:1991年,原型版本,功能简陋,只有一个命令GET,服务器只能回应HTML格式字符串,该版本已过时

  http/1.0版本: 1996年5月,支持cache, MIME, method等。

  http/1.1版本: 1997年1月,默认建立持久连接,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度

  http/2 版本: 2015年5月作为互联网标准正式发布,头部信息和数据体都是二进制,引入头信息压缩机制等。

1.x版本说明

  http1.0版本:

    任何格式的内容都可以发送,这使得互联网不仅可以传输文字,还能传输图像、视频、二进制等文件。

    除了GET命令,还引入了POST命令和HEAD命令。

    http请求和回应的格式改变,除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。

    头信息是 ASCII 码,后面数据可为任何格式。服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME即多用途互联网邮件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型, 常见Content-Type值:text/xml image/jpeg audio/mp3

    每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接

  http1.1版本:

    http1.1是目前最为主流的http协议版本,从1997年发布至今,仍是主流的http协议版本。

    引入了持久连接( persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。

    引入了管道机制( pipelining),即在同一个TCP连接里,客户端可以同时发送多个请求(大多数浏览器允许同时建立6个持久连接引入了管道机制),进一步改进了HTTP协议的效率。

    新增方法:PUT、 PATCH、 OPTIONS、 DELETE。

    ttp协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度。

  http1.x版本问题:

    http1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,无法保证数据的安全性。

    1.1版本允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应,可能会造成Head-of-line blocking的问题。

    http1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keepalive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站), keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。

  http1.1没有解决的问题

    1、传输数据是明文

    2、header头部数据太长

    3、每次传输还是要重新连接

    4、server不能主动push

http/2协议

  http/2发布于2015年,目前应用还比较少,该版本主要有如下特点:

  http/2是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。

  复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了队头堵塞的问题,此双向的实时通信称为多工( Multiplexing)。

  HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送。

  引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度

查看网站http协议版本

http协议各版本差异

http1.0和http1.1的区别

  1、长连接

  HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,弥补了HTTP1.0每次请求都要创建连接的缺点.

  http中的长连接keep-alive和websocket的长连接不太一样, websock的长连接可以保持几个小时不断线, 而http的长连接也就几秒钟而已, 相对于http1.0来说是长连接, 使用一次tcp的握手挥手, 完成多个request-response,也就是说, 在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。只是这一次的多个request用的是一个tcp连接.

    http1.0短连接的操作步骤是:

    建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接

    http1.1开启了长连接的操作步骤是:

    建立连接——数据传输...(保持连接)...数据传输——关闭连接 

  TCP的保活功能主要为服务器应用提供。如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据。保活功能就是试图在服务端器端检测到这种半开放的连接。如果一个给定的连接在10分钟(服务器设定的)内没有任何动作,服务器就向客户发送一个探测报文段,根据客户端主机响应探测4个客户端状态:

    (1)、客户主机依然正常运行,且服务器可达。此时客户的TCP响应正常,服务器将保活定时器复位。

    (2)、客户主机已经崩溃,并且关闭或者正在重新启动。上述情况下客户端都不能响应TCP。服务端将无法收到客户端对探测的响应。服务器总共发送10个这样的探测,每个间隔75秒。若服务器没有收到任何一个响应,它就认为客户端已经关闭并终止连接。

    (3)、客户端崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。

    (4)、客户机正常运行,但是服务器不可达。这种情况与第二种状态类似。

  2、缓存处理

    在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略

  3、带宽优化和网络连接的使用

    HTTP1.0中,存在一些浪费带宽的现象,例如:客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),方便了开发者自由的选择以便于充分利用带宽和连接

  4、错误通知的管理

    在HTTP1.1中新增24个状态响应码,如

    409(Conflict)表示请求的资源与资源当前状态冲突;

    410(Gone)表示服务器上的某个资源被永久性的删除

  5、Host头处理

    在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)

posted @ 2022-03-28 22:34  那就凑个整吧  阅读(572)  评论(0编辑  收藏  举报