美文网首页前端面试之路
「Network」关于网络方面的一些面试问题

「Network」关于网络方面的一些面试问题

作者: ybrelax | 来源:发表于2019-07-30 22:10 被阅读0次

    Http请求中的keep-alive有了解嘛?

    答案:
    在http早期,每个http请求都要求打开一个tcp socket连接,并且使用一次之后就断开这个tcp连接了。而keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。使用keep-alive可以减少tcp连接的次数,减少了等待时长。但是tcp的长时间占用也会导致资源的占用。
    当需要建立 HTTP 长连接时,HTTP 请求头将包含如下内容:
    Connection: Keep-Alive
    如果服务端同意建立长连接,HTTP 响应头也将包含如下内容:
    Connection: Keep-Alive
    当需要关闭连接时,HTTP 头中会包含如下内容:
    Connection: Close
    https://www.jianshu.com/p/49551bda6619

    Http2的多路复用

    在 HTTP/1 中,每次请求都会建立一次HTTP连接,也就是我们常说的3次握手4次挥手,这个过程在一次请求过程中占用了相当长的时间,即使开启了 Keep-Alive ,解决了多次连接的问题,但是依然有两个效率上的问题:

    • 第一个:串行的文件传输。当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、服务器返回文件,这三个步骤。我们假设这三步用时都是1秒,那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。(注:此项计算有一个前提条件,就是浏览器和服务器是单通道传输)
    • 第二个:连接数过多。我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,当第51个人访问时,就需要等待前面某个请求处理完成。

    HTTP/2的多路复用就是为了解决上述的两个性能问题。
    在 HTTP/2 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。
    帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
    多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能

    为什么HTTPS要比HTTP更安全

    HTTP存在TLS/SSL协议层 HTTP= HTTP + TLS/SSL

    HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。

    简单了解下:TLS/SSL主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密
    https://juejin.im/post/5af557a3f265da0b9265a498

    HTTP状态码了解一下

    状态码 类别 描述
    1xx Informational(信息性状态码) 请求正在被处理
    2xx Success(成功状态码) 请求处理成功
    3xx Redirection(重定向状态码) 需要进行重定向
    4xx Client Error(客户端状态码) 服务器无法处理请求
    5xx Server Error(服务端状态码) 服务器处理请求时出错

    常见应答状态码:

    image.png

    401, 可能还存在未认证的情况
    405: 请求头方法错误; 一般是将post请求做成get的请求方式
    415:后台程序不支持提交的content-type
    422 则表现为请求格式错误,但出现了 语义 错误
    417: 预期结果失败
    499: 这种情况,出现了请求服务器时间过长

    UDT和TCP的区别

    TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

    UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

    ajax 和 websocket的区别

    1. 本质不同:
      ajax即是异步Javascript和xml,是一种创建交互式网页的网页开发技术
      websocket: 是h5的一种新协议,是基于tcp连接进行的实时通信
    2. 生命周期不同:
      websocket是一种长连接,在一个会话种一直存在。
      ajax: 是一个短连接
    3. 适用范围
      websocket使用前后端实时通信,而ajax则是非实时通信
    4. 发起人不同
      ajax是客户端发起请求,websocket是客户端和服务端相互推送消息
      5 用法
    ajax:
    $.ajax({
    type:"post",
    url:"http://localhost:8080/target",
    data:"state = yes",
    dataType:"json",
    success:funciont(data){
    }
    });
     
    websocket:
    var monitor = new webSocket('''')
    onOpen 、onMessage、onClose
    

    说下你了解的HTTP缓存机制

    • 浏览器的缓存,HTTP缓存有多种规则,那么我可以根据是否需要向服务端发起请求来分类,可以将其分为强制缓存,对比缓存

    • 强制缓存 HTTP头部字段:cache-control, expires(这个字段很少用了,服务端的时间可能客户端时间不一致, 而expires代表的是服务端时间,可以考虑用 max-age

    • 对比缓存通过对比HTTP的last-modifyed, etag字段,下一次请求服务器资源的时候可以发送if-modified-since与服务器的last-modiy对比来是否请求缓存。如果时间一直则继续使用缓存

    https://juejin.im/post/5c1869ab6fb9a049f154207a

    相关文章

      网友评论

        本文标题:「Network」关于网络方面的一些面试问题

        本文链接:https://www.haomeiwen.com/subject/jimorctx.html