http协议各版本差异

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。

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

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

这样就推动了http2.0的出现

四、http/2协议

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

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

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

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

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

五、查看网站http协议版本

打开浏览器,以百度首页为例,按下F12键。点击network项,然后刷新网页。

http协议各版本差异从响应头部信息可以看出,该网站使用的是http1.1版本。

 

面试题: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个客户端状态:
  • 客户主机依然正常运行,且服务器可达。此时客户的TCP响应正常,服务器将保活定时器复位。
  • 客户主机已经崩溃,并且关闭或者正在重新启动。上述情况下客户端都不能响应TCP。服务端将无法收到客户端对探测的响应。服务器总共发送10个这样的探测,每个间隔75秒。若服务器没有收到任何一个响应,它就认为客户端已经关闭并终止连接。
  • 客户端崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
  • 客户机正常运行,但是服务器不可达。这种情况与第二种状态类似。
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)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值