http前端高频问题
TCP的三次握手
三次握手的过程
- 客户端发送SYN的数据包给服务器,请求连接
- 服务端收到数据包后给客户端发送SYN和ACK的数据包,告知客户端已经准备好
- 客户端收到SYN包和ACK包后,返回给ACK包给服务端,确认连接
为什么不能是两次
TCP连接是一个严谨且精确的过程,如果是两次,在第一次发送SYN包的时候如果因为网络问题在浏览器错误,会再次发送SYN包,但之后仍然会发送之前的SYN包这样对于服务端来说是建立了两次连接,但是对于客户端是建立了一次连接,会出现数据上的问题(就是担心网络不稳定的情况)
TCP的四次挥手
四次挥手的过程
- 客户端停止数据请求,发送FIN包给服务端
- 服务端收到FIN包,返回FIN+ACK包给客户端,进入半关闭阶段,但仍然可以发送数据
- 服务端等待没有数据接收,再发送FIN+ACK包给客户端,进入等待关闭状态
- 客户端第二次收到ACK包,给服务端发送ACK包,客户端进入等待关闭状态,服务端收到ACK关闭,客户端等待2msl再关闭
为什么是四次挥手
主要是在服务端第一次发送ACK包的时候,可能还有数据在发送,要确保两方的数据发送完成,服务端再次确认
客户端为什么要等待2msl之后再关闭连接
可能客户端给服务端发送的ACK包之后服务端没有收到数据包,服务端会再次给客户端发送FIN+ACK包,也是防止因为网络原因到之后没有成功关闭
TCP和UDP的区别,以及适合使用的场景
- TCP:面向连接的,UDP是无连接的
- TCP是一对一的,UDP是多对多的
- TCP是可靠的的数据,但是UDP不可靠
- TCP会队头阻塞,但是UDP不会
TCP的适用场景:日常的数据请求等等
UDP的适用场景:实时语音、视频通话
http1.1和http2的区别
http1.0的问题
- 浏览器与服务器只能保持短暂的连接每次只建立一个TCP连接
http1.1主要解决了哪些问题以及还有几个缺点
解决方案:
- 持久连接(TCP默认不关闭),且同一个域名下大多数浏览器可以同时建立6个持久连接
遗留问题:
- 队头阻塞,队头的数据重复且比较大,高延迟
- 明文数据传输,不安全
- 无法服务端推送
http2的几个优点
- 二进制传输,安全性高
- 多路复用,通过一个tcp的链接,然后二进制帧和消息标识在传输数据
- 头部压缩,减少每次传输的数据,这个过程是通过HPACK算法
- 服务端推送