http1.1 和 http 2.0 区别
一次完整的http请求过程
一次完整的请求过程通俗点讲就是在浏览器中输入url后,浏览器做了什么;
1、解析域名;
2、简历TCP链接,进行三次握手(这里TCP详解);
3、WEB浏览器向服务器发送HTTP请求报文;
4、服务器响应请求;
5、浏览器接受html文件并解析(同时会下载html中引用的js、css、图片等资源,会自动下载);
6、浏览器渲染页面;
7、断开TCP连接;
TCP 详解
建立起一个TCP连接需要经过“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),
即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,
客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,TCP 连接都将被一直保持下去。
断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,
断开过程需要经过“四次握手”(过程就不细写 了,就是服务器和客户端交互,最终确定断开)
所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。如下图所示:
为什么要进行TCP三次握手?
- 三次握手主要目的是:为了客户端和服务端双方确认数据是否传输和接收是否成功
- 第一次握手:Client什么都不能确认;Server确认了对方发送正常
- 第二次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己接收正常,对方发送正常
- 第三次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己发送、接收正常,对方发送接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
HTTP1.0 与 HTTP1.1 和 HTTP2.0 的区别
HTTP1.0版本 是一种(无状态)(无连接)的应用层协议
浏览器的每一次请求都会建立一个TCP连接;服务器响应请求后会立即断开连接(无连接)。
服务器不跟踪每一个客户端同时也不会记录每一次请求(每一次请求都是一次新请求)(无状态)。
1.0版本的缺点:
- 无连接最大的弊端就是无法复用连接,每一次请求都需要重新建立一次TCP连接。(TCP连接的释放过程是很费劲的,会导致网络的利用率非常低)
- 队头阻塞(head of line blocking)1.0版本规定下一个请求必须等上一个请求的响应到达后才可以发送请求
HTTP1.1版本(继承了1.0版本并解决了他的一些痛点)
首先HTTP 1.1版本支持了长连接、并新增了请求的流水线(Pipelining)处理
pipelining 的出现 支持了一个TCP 连接进行多个请求,但是并不是并行的还是会有队头阻塞的出现;
http2.0 后续更新。。。