Skip to content

HTTP状态码 ​

  • 1xx 服务端收到请求,但需要客户端再发一个请求以进行后续动作
  • 2xx 服务端收到请求并处理成功
  • 3xx 临时请求,需要进一步细化
  • 4xx 客户端发起请求出现了问题
  • 5xx 服务端处理请求出现了问题

HTTP 1.0 ​

  • 无法复用连接,每次请求都会建立一个新的TCP连接
  • 队头阻塞,后一个请求必须得在前一个请求响应之后才能发起
  • 没有Host字段

HTTP 1.1 ​

  • 优势:
  • 实现了长连接,header中新增了 Connection 字段,keep-alive 可以保持连接不关闭
  • 后一个请求可以在前一个请求响应前发起,但请求的响应必须与发起顺序相同
  • 新增了缓存处理,Cache-Control 字段可以设置缓存,max-age 配置缓存失效时间
  • 新增了Host字段,允许一个服务端同时处理多个站点的请求
  • 增加了cookie和session的支持,允许服务端在客户端存储状态信息

HTTP 2.0 ​

  • 二进制分帧,在应用层和传输层之间新增了一个二进制分帧层,将请求header和body通过二进制编码分帧后传输,从而提升性能
HTTP/2 的二进制分帧是 HTTP/2 协议中位于应用层和传输层之间的一个关键层,它将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式编码。
  • 多路复用,可以在一个连接中并行请求,并通过帧头的stream id来进行消息组装和请求归属
通过流或帧来传输数据,每个流都有一个唯一的整数 ID,可承载双向消息,代表一个完整的请求或响应。
“帧” 是数据传输的最小单位,流中的数据以帧的形式传输,每个帧都包含流标识符,用于标明该帧属于
哪个流。当客户端发出多个请求时,这些请求会被分解成多个帧并并发地通过单一的 TCP 连接发送,服
务器根据帧中的流标识符将帧重新组装成完整的请求 / 响应对。
  • 头部压缩,使用HPACK算法进行头部压缩
  • 服务端推送,服务端可以主动向客户端推送消息

HTTP 3.0 ​

  • 基于QUIC协议,QUIC是基于UDP的传输协议,减少了连接建立的延迟
  • 实现了类似TCP的流量控制、传输可靠性功能
  • 集成了TLS 1.3加密协议,提供更快的连接建立速度
  • 支持多路复用,避免了TCP的队头阻塞问题

三次🤝 ​

  • 第一次:客户端向服务端发送一个不包含数据报文的请求,请求报文中SYN标识为1
  • 第二次:服务端接收到请求后同意建立连接,向客户端返回报文,SYN和ACK标识都为1
  • 第三次:客户端收到服务端同意的报文后,再次发送请求,请求报文中ACK标识为1

四次👋 ​

  • 第一次:客户端向服务端发送请求关闭连接的报文,报文中FIN标识为1
  • 第二次:服务端收到关闭请求后,进入半关闭状态,返回给客户端报文,报文中包含FIN和ACK
  • 第三次:客户端收到服务端将关闭的消息后,关闭客户端的TCP连接,并向服务端发送ACK的请求
  • 第四次:服务端收到客户端ACK之后,关闭服务端的TCP连接

计算机网络体系结构 ​

  • 7层结构:应用层 -> 表示层 -> 会话层 -> 传输层 -> 网络层 -> 数据链路层 -> 物理层
  • 5层结构:应用层 -> 传输层 -> 网络层 -> 数据链路层 -> 物理层
  • TCP/IP结构:应用层 -> 传输层 -> 网络层 -> 网络接口层

TCP ​

  • 面向连接的,可靠的数据传输服务
  • 每次数据传输都需要先建立连接
  • 一对一的单点数据传输
  • 提供可靠的数据传输,无差错,不重复,不丢失且按序
  • 面向字节流

UDP ​

  • 提供无连接的,尽最大可能的数据传输服务
  • 无连接,不保证可靠的交付
  • 面向报文
  • 没有拥塞控制,即使网络阻塞依然不影响发送速率
  • 支持一对一、一对多、多对多传输

UQIC ​

  • QUIC是在UDP基础上构建的。
  • QUIC通过应答机制保证数据完整性,当接受方受到数据后,会返回应答包给发送方。如果发送方没收到应答包会进行重发,
  • QUIC还有能保证有序性,通过数据包内的偏移量让接受方进行正确组装。
  • QUIC有流量控制功能,接收方能动态控制发送方的发送速率
  • QUIC使用TLS1.3进行加密。

HTTPS ​

  • SSL协议 + HTTP协议
  • 优点
    • 数据完整性:内容传输会进行完整性校验
    • 数据加密性:内容经过对称加密,每一个链接生成唯一密钥
    • 身份认证:第三方无法伪造客户端(服务端)的身份
  • 加密方式
    • 对称加密:加解密使用同一个密钥
    • 非对称加密:使用公钥进行加密,使用私钥进行解密
    • 对称加密 + 非对称加密:先通过对称加密来加密报文,再通过非对称加密来加密对称加密的密钥
  • 数字签名
      1. 客户端通过Hash函数提取报文中的部分摘要,并使用私钥进行加密生成签名,将加密后的签名和报文一起发送给服务端
      1. 服务端使用客户端的公钥对加密后的签名进行解密,并将解密后的摘要和从报文中使用相同Hash函数提取的摘要进行对比
      1. 若摘要对比相同,则认为该报文内容未被篡改
  • 数字证书
    • 数字证书由CA机构颁发,并且会在系统和浏览器中预装根证书
  • 怎么通信的
    1. 首先客户端向服务端发起请求,服务端使用非对称加密,返回证书的公钥,保留证书的私钥。
    2. 客户端收到数据后,先判断证书有效性,并生成一个随机数,使用公钥加密随机数,发给服务端。
    3. 服务端使用私钥解密这个随机数。
    4. 之后对话的使用这个解密的随机数进行对话。

域名系统(DNS) ​

  • 域名系统包含:根域名、顶级域名、二级域名、三级域名、四级域名等
  • 每一级域名都包含一个域名服务器,域名服务器一共有四类:顶级域名服务器、根域名服务器、权威域名服务器、本地域名服务器
  • DNS查询有两种方式:迭代查询和递归查询(具体过程查看浏览器模块)
  • 域名解析包含:A记录、MX记录、CNAME记录、TXT记录、NS记录

CDN ​

  • 内容分发网络,在距离用户更近的地方设置缓存服务器,当用户访问资源时,由该缓存服务器返回资源,从而提升响应速度
  • 当用户访问CDN地址时,请求会先打到CDN负载均衡服务器上,再由该服务器选择一台CDN缓存服务器去请求资源
  • CDN的缓存除了受缓存时间到期自动刷新外,也支持用户手动刷新
  • CDN的好处除了提升响应速度,还包含隐藏源服务器IP、分散请求压力等

浏览器常见的请求头 ​

  1. Accept:浏览器请求的内容
  2. Accept-language:浏览器请求的语言
  3. Cookie
  4. Host
  5. Referer
  6. Authortion
  7. 缓存相关

浏览器常见的响应头 ​

  1. Access-Control-origin: 控制是否跨域的
  2. Cache-contol
  3. Date
  4. Etag
  5. content-type:
    1. application/x-www-form-urlencodeed: 原生form表单提交方式,默认格式
    2. multipart/form-data常用于form上传文件
    3. application/json:序列话后字符串
    4. text/xml,XML
  6. 缓存相关

websocket协议 ​

  1. 为了满足长连接的需求,解决旧的轮询方式。
  2. 借用http协议完成一部分握手,观察可以看见,第一次是101状态码,请求升级协议,header头部也有表示升级的头部信息:
  3. connection: Upgrade;
  4. Upgrade:websocket;
  5. 然后就建立了websocket通信。

跨域 ​

同域名、同请求协议、同端口号。

  1. 最常用的方式是,让后端实现CORS方案,通过在响应头设置access-control-allow-origin/methods等信息,控制当前域名允许跨域。
  2. 可以使用JSONP
  3. 可以使用websocket
  4. 可以使用代理,如node服务代理
  5. 在开发阶段可以使用浏览器插件将请求代理到本地资源上。

http 报文结构 ​

  1. 报文首部+空行+报文主体
  2. 报文首部:请求行+请求首部+通用首部+实体首部