http1.1和http2.0的区别?
http协议的特征:
1.http是一个基于tcp/ip通信协议来传递数据(html文件、图片文件、查询结果等)。
2.http是一个属于应用层的面向对象的协议,由于其简洁、快速的方式,适用于分布式超媒体信息系统,它于1990年提出,经几年发展完善。http协议工作于客户端-服务端架构之上。
3.浏览器作为http客户端通过url向http服务端(即web服务器)发送所有请求,web服务器根据接收到的请求后,向客户端发送响应信息。
http2.0的特征:
1.内容安全,因为http2.0基于https的,天然具有安全特性,通过http2.0的特性可以避免单纯使用https的性能下降。
2.二进制格式,http1.X的解析是基于文本的,http2.0将所有的传输信息分割为更小的信息和帧,并对他们采用二进制格式编码,基于二进制可以让协议有更多的扩展性,比如引入了帧来传输数据和指令。
3.多路复用,这个功能相当于是长连接的增强,每个request请求可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面,另外多路复用中也支持了流的优先级,允许客户端将服务器哪些内容是更优先级的资源,可以优先传输。
http1.1和http2.0的区别:
1.二进制协议
http1.1中的报文的头信息必须是文本(ASCII编码),数据体可以是文本,也可以是二进制。
http2.0是一个二进制协议,头信息和数据体都是二进制,并且统称为“帧”,可以分为头信息帧和数据帧。帧的概念是http2.0实现多路复用的基础。
2.多路复用
http2.0实现了多路复用,http2.0仍然复用TCP连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求和回应,并且不用按照顺序一一发送,这样就避免了“队头阻塞”的问题。
http1.1中浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(连接数量),超过限制会被阻塞。
3.数据流
http2.0使用了数据流的概念,因为http2.0的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的请求。因此,必须要对数据包做标记,指出它属于哪个请求。
http2.0将每个请求或回应的所有数据包称为一个数据流。每个数据流都有一个独一无二的编号。数据包发送时,都必须标记数据流ID,用于区分他属于哪个数据流。
4.头信息压缩
http2.0实现了头信息压缩,优化了浪费带宽和影响速度。引入了头信息压缩机制。一方面,头信息使用gzip或compress压缩再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就能提高速度了。
http1.1协议不带状态,每次请求都必须附上所有信息,所以请求的很多字段都是重复的,比如Cookie和User Agent,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。
5.服务器推送
http2.0允许服务器未经请求,主动向客户端发送资源,这就叫服务器推送。
使用服务器推送提前给客户端推动必要的资源,这样就可以相对减少一些延迟时间。
这里需要注意的是http2.0下服务器主动推送的是静态资源和webSocket以及使用SSE等方式向客户端发送及时数据的推送是不同的。
6.访问速度
http2.0请求资源所需时间更少,访问速度更快,提升访问速度,相比较http1.0
前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理