0126面试题——CORS、http2、TCP三次握手

145 阅读5分钟

计算机网络

  1. 什么情况下请求方法是options

    • 在W3C标准中,用于跨域的标准方案是CORS,即跨域资源共享
    • 在CORS中,将请求分为两类:简单请求,非简单请求
    • 简单请求
      • 请求方法是:HEAD/GET/POST之一
      • HTTP的头信息不超出以下几种字段:
        • Accept
        • Accept-Language
        • Content-Language
        • Last-Event-ID
        • Content-Type, 只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
    • 不是简单请求即是非简单请求
    • 当发送跨域的非简单请求时,会在正式通信之前,增加一次HTTP查询请求,称为预检请求
    • 预检请求用的请求方法就是OPTIONS,用来询问服务器支持的请求方法跟接受的请求头部
    • 资料:跨域资源共享 CORS 详解
  2. http2的多路复用如何工作的

    • http2把原来http所传输的信息划分为多个粒度更小的帧,并对其进行二进制编码,然后将其映射到属于特定流的消息。
    • 在一个 TCP 连接上,我们可以向对方不断发送帧,每帧的 stream identifier 标明这一帧属于哪个流,然后在对方接收时,根据 stream identifier 拼接每个流的所有帧组成一整块数据。
    • 我们可以把每个请求或者响应都当作一个流,那么多个请求变成多个流,这不同流的数据被分成多个帧,在一个连接中交错地发送给对方,这就是 http2 中的多路复用。
  3. 什么是帧id,他有什么作用

    • 帧头部的流标识符Stream Identifier, 用来表示属于哪一个流
  4. 如果一个请求服务器要处理很久才能响应,有哪些办法在服务端处理完后,客户端能第一时间接收到

    • 客户端不断轮询,直到服务器处理返回
    • 使用websocket,服务器处理完成后通知客户端
  5. 请求超时时间可以设置为24h吗

    • 可以,需要同时对前端、WEB服务器、后端进行配置
  6. 概述TCP与UDP

    • TCP:TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
    • UDP协议全称是用户数据报协议,是一种无连接的协议。当报文发送之后,是无法得知其是否安全完整到达的。
  7. 三次握手,每次握手的作用

    • 客户端发送SYN包,请求建立链接, 进入SYN-SENT状态
    • 服务器收到SYN包,发送SYN+ACK,请求建立链接,并确认上一个包,进入SYN-RECV状态,并为TCP连接分配对应资源
    • 客户端收到SYN+ACK后,发送ACK进行确认,客户端为TCP连接分配对应资源,双方进入ESTAB-LISHED状态
  8. 三次握手的目的

    • 三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
  9. TCP“握手”为什么不能是1次或者2次

    • 如果TCP连接是两次握手
      • 当第一个SYN从客户端发出后,在网络中长时滞留
      • 因此客户端不会收到服务器的响应,尝试再发送SYN重新建立连接,假设这次成功建立了
      • 客户端跟服务器通信完毕,然后释放链接
      • 这时,在网络中滞留的SYN包,终于到了服务器,然后被服务器误认为是客户端想再次建立连接
      • 于是服务器向客户端发送SYN + ACK确认连接
      • 很显然客户端不会再回复(一是因为,只有两次握手,客户端没有被要求回复,二是因为客户端并没有想建立连接,只是服务器的错误判断),因此服务器单方面的建立了连接,造成了资源的浪费
    • 如果TCP连接是一次握手
      • 客户端发送SYN包之后,得不到服务器的回复(只有一次握手),因此不能确认连接是否建立成功
  10. http2的特点

    • 多路复用:多个流的数据被分成多个帧,在一个连接中交错地发送
    • 流优先级:http2允许每个流具有流依赖关系以及相关的权重:
    • 头部压缩:通过对先前未见过的值使用静态哈夫曼编码,并把这个头部插入动态表中。而如果是已经存在于每一侧的静态表或动态的值进行索引的替换。
    • 服务端推送:如果服务端收到了一个对文档的请求,该文档包含内嵌的指向多个资源文件的链接,且服务端选择向客户端推送那些额外的资源,那么在发送包含链接的 DATA 帧之前发送 PUSH_PROMISE 帧可以确保客户端在发现内嵌的链接之前。能够知道有一个资源将要被推送过来。一旦客户端收到了 PUSH_PROMISE 帧,并选择接收被推送的响应,客户端就不应该为准备推送的响应发起任何请求
    • 资料:HTTP2 详解 / 揭秘http2
  11. 如何使用http2,http2的使用条件

    • 如何使用:在HTTPS的基础上,对WEB服务器进行配置开启HTTP2
    • 使用条件:前后端都支持HTTP2