今天面试被问到http1.0、1.1、2.0的区别,我是一点都不知道,只知道https和htpp的区别,没办法,只能学一下然后记录一下
http1.0
说到常用的http,我们知道浏览器与服务器只保存短暂的连接,每次请求都需要跟服务器建立一个TCP连接,服务器完成请求后立即断开连接,服务器不跟踪也不记录过去的请求。
http1.1
对于http1.0很明显有性能方面的问题,比如解析html文件的时候,发现有其他的资源文件的时候,就会重新去创建连接。这样子一个html文件包含多次请求和响应,每次请求都会创建连接和关闭连接。
http1.1中有长连接可以解决这个问题。http1.1支持在一个TCP连接上传送多个http请求和响应,减少了建立和关闭连接的消耗和延迟,建立一次连接,然后多次请求都可以从这个连接完成。
并且Http1.1还允许客户端不用等待上一次请求结果返回,然后就直接进行下一次请求,但是服务端需要根据接受到请求的顺序依次返回响应结果,以保证客户端能够区分出每次请求的响应内容,这样也能够减少花在请求上的时间。
在http1.0的基础上,增加了更多的请求头和响应头来完善功能:
- 引入了更多的缓存控制策略
- 引入range,允许值请求资源的一部分
- 引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟站点 (更加安全)
- 添加了其他的请求方法:put、delete、options
http2.0
http2.0与之前的版本比起来,性能有了很大的提升,添加了一些新特性:
- 多路复用
- 二分制分帧
- 首部压缩
- 服务器推送
多路复用
在一个连接中,客户端和浏览器都能同时发送多个请求或者响应,而且可以不用按照顺序一一对应,这样就避免了阻塞。
二分制分帧
帧是通信中最小的单位,http2.0采用二进制格式传输数据,而不是1.0的文本格式,解析起来更加高效
首部压缩
http2.0在客户端和服务器端都使用首部表
来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送。首部表
在连接期间一直存在,由客户端和服务器端一起更新维护。比如两个请求,请求一发送了所有的头部字段,请求二只需要发送差异数据,这样减少冗余数据,节约开销。
服务器推送
http2.0允许服务器主动推送数据给客户端。比如在一个页面请求中,可以直接带上页面的需要的其他资源,避免客户端再次创建连接发送请求到服务器获取。这种方式非常适合静态资源
。
总结
- http1.0是短暂的连接,响应结束连接就断开
- http1.1是长连接,如果TCP连接默认不关闭,就可以一直请求数据
虽然可以多次请求数据,但是服务器响应数据的顺序是依次的,只有处理了前一个请求才会去处理下一个请求。
新增了put、delete、options方法,新增了一些响应头和请求头 - http2.0采用二进制而不是文本格式,完全多路复用,不用在乎顺序问题,首部压缩、服务器推送