http相关问题

133 阅读3分钟

http前端高频问题

TCP的三次握手

三次握手的过程

  1. 客户端发送SYN的数据包给服务器,请求连接
  2. 服务端收到数据包后给客户端发送SYN和ACK的数据包,告知客户端已经准备好
  3. 客户端收到SYN包和ACK包后,返回给ACK包给服务端,确认连接

为什么不能是两次

TCP连接是一个严谨且精确的过程,如果是两次,在第一次发送SYN包的时候如果因为网络问题在浏览器错误,会再次发送SYN包,但之后仍然会发送之前的SYN包这样对于服务端来说是建立了两次连接,但是对于客户端是建立了一次连接,会出现数据上的问题(就是担心网络不稳定的情况)

TCP的四次挥手

四次挥手的过程

  1. 客户端停止数据请求,发送FIN包给服务端
  2. 服务端收到FIN包,返回FIN+ACK包给客户端,进入半关闭阶段,但仍然可以发送数据
  3. 服务端等待没有数据接收,再发送FIN+ACK包给客户端,进入等待关闭状态
  4. 客户端第二次收到ACK包,给服务端发送ACK包,客户端进入等待关闭状态,服务端收到ACK关闭,客户端等待2msl再关闭

为什么是四次挥手

主要是在服务端第一次发送ACK包的时候,可能还有数据在发送,要确保两方的数据发送完成,服务端再次确认

客户端为什么要等待2msl之后再关闭连接

可能客户端给服务端发送的ACK包之后服务端没有收到数据包,服务端会再次给客户端发送FIN+ACK包,也是防止因为网络原因到之后没有成功关闭

TCP和UDP的区别,以及适合使用的场景

  1. TCP:面向连接的,UDP是无连接的
  2. TCP是一对一的,UDP是多对多的
  3. TCP是可靠的的数据,但是UDP不可靠
  4. TCP会队头阻塞,但是UDP不会

TCP的适用场景:日常的数据请求等等

UDP的适用场景:实时语音、视频通话

http1.1和http2的区别

http1.0的问题

  1. 浏览器与服务器只能保持短暂的连接每次只建立一个TCP连接

http1.1主要解决了哪些问题以及还有几个缺点

解决方案:

  1. 持久连接(TCP默认不关闭),且同一个域名下大多数浏览器可以同时建立6个持久连接

遗留问题:

  1. 队头阻塞,队头的数据重复且比较大,高延迟
  2. 明文数据传输,不安全
  3. 无法服务端推送

http2的几个优点

  1. 二进制传输,安全性高
  2. 多路复用,通过一个tcp的链接,然后二进制帧和消息标识在传输数据
  3. 头部压缩,减少每次传输的数据,这个过程是通过HPACK算法
  4. 服务端推送