带你整理面试过程中关于HTTP1.0 HTTP1.1 和 HTTP2.0 的相关知识点

Posted 南淮北安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你整理面试过程中关于HTTP1.0 HTTP1.1 和 HTTP2.0 的相关知识点相关的知识,希望对你有一定的参考价值。

文章目录

一、HTTP 1.0

支持的是短连接,相当于客户端每次发起的请求都需要进行tcp三次握手,特别消耗资源

二、HTTP 1.1

1. Keep-Alive

为了解决 HTTP1.0 的问题,HTTP1.1引入了 Keep-Alive

支持了长连接,客户端发起 http 请求的时候,通过tcp三次握手建立连接之后,后续的每次请求都不需要再次进行三次握手,

除非过了设置的超时时间,虽然不需要再次进行三次握手,但是客户端的每次请求都只能按顺序接收处理,而不能同时将多个请求一次性发送服务器端并且同时响应返回给客户端接收

连接过程中:tcp 通道中,这是一个单通道,同一时刻只能处理一个http请求,并且必须按照顺序

2. 管线化

为了克服同域并行请求限制带来的阻塞,引入了HTTP管线化,

它是建立在持久连接之上,是把所有请求一并发给服务器,但是服务器需要按照顺序一个一个响应,而不是等到一个响应回来才能发下一个请求,这样就节省了很多请求到服务器的时间。

但是虽然可以一次发送多个请求,但是同一时刻只能处理一个请求,后面的请求必须等到前面的请求响应之后才能进行;所以一旦有某请求超时,后续的请求只能阻塞,也就是出现线头阻塞

一次只能处理一个请求,因为它是基于文本分割解析的协议,以分隔符分割消息的数据,在完成之前不能停止解析;
而且解析这种数据无法预知需要的内存,所以会给服务器很大的压力,因为不知道要把需要解析的内容读到多大的缓冲区。

三、HTTP 2.0

基于 http1.1 的基础之上,支持将多个请求封装为一个请求,同时请求服务器,响应返回给客户端,http2 在不改变原有传输的基础上,在传输层和应用层之间加入了一层逻辑层,这个逻辑层应用的是 spdy 的原理,能够将请求实现封装一起传输

HTTP1.1 仍然存在的问题:

(1)支持一次发送多个请求,但是同一时刻只能处理一个请求,后面的请求必须等到前面的请求响应之后才能进行;所以一旦有某请求超时,后续的请求只能阻塞,也就是出现线头阻塞

(2)连接数过多。我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器发起的最大请求数为 6,也就是服务器能承载的最高并发为 50,当第 51个人访问时,就需要等待前面某个请求处理完成。

HTTP2.0 对问题的解决:

(1)HTTP2.0 可以实现多路复用:是因为它是基于二进制帧的协议,所有就是请求的都是通过一个 TCP 连接并发完成。因为在多路复用之前所有的传输是基于基础文本的,在多路复用中是基于二进制数据帧的传输、消息、流,所以可以做到乱序的传输(因为有帧对数据进行顺序标识,所以不会出现合并后数据错乱)

(2)HTTP/2对同一域名下所有请求都是基于流,也就是说同一域名不管访问多少文件,也只建立一路连接。同样Apache的最大连接数为300,因为有了这个新特性,最大的并发就可以提升到300,比原来提升了6倍!

以上是关于带你整理面试过程中关于HTTP1.0 HTTP1.1 和 HTTP2.0 的相关知识点的主要内容,如果未能解决你的问题,请参考以下文章

带你整理面试过程中关于锁升级的过程

带你整理面试过程中关于多线程的编程问题

带你整理面试过程中关于ThreadLocal的相关知识

带你整理面试过程中关于Java 中多线程的创建方式的最全整理

带你整理面试过程中关于ARP 协议的相关知识点

带你整理面试过程中关于 Java 中的 异常分类及处理的相关知识