前端面试题之网络基础

1、HTTP 协议的主要特点

  • 简单快速、灵活、无连接、无状态

2、HTTP 报文的组成部分

  • 请求报文:
    • 请求行 ( http 方法 + 页面地址 + http 协议 + 版本)
    • 请求头( key + value 值)
    • 空行(服务端通过空行来判断下一部分不再是请求头,而当做请求体来解析)
    • 请求体(数据部分)
  • 响应报文:状态行 + 响应头 + 空行 + 响应体

3、HTTP 方法

  • GET => 获取资源
  • POST => 传输资源
  • PUT => 更新资源
  • DELETE => 删除资源
  • HEAD => 获得报文首部

4、POST 和 GET 的区别

  • GET在浏览器回退时是无害的,而POST会再次提交请求 *
  • GET请求会被浏览器主动缓存,而POST不会,除非手动设置 *
  • GET请求参数会被完整保留在浏览器的历史记录里,而POST中的参数不会被保留 *
  • GET请求在URL中传送的参数是有长度限制的,而POST没有限制 *
  • GET参数通过URL传递,POST放在Request body中 *
  • GET请求只能进行 url 编码,而POST支持多种编码方式
  • GET产生的URL地址可以被收藏,而POST不可以
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

5、HTTP 状态码

  • 1xx:指示信息 —— 表示请求已接受,继续处理

  • 2xx: 成功 —— 表示请求已被成功接受

    • 200:OK,表示从客户端发来的请求在服务器端被正确处理
    • 204:No content,表示请求成功,但响应报文不含实体的主体部分
    • 205:Reset Content,表示请求成功,但响应报文不含实体的主体部分,但是与 204 响应不同在于要求请求方重置内容
    • 206:Partial Content,客户发送了一个带有Range头的GET请求,服务器完成了它(例如请求较大的文件,如用vedie标签或audio标签播放音视频地址)
  • 3xx:重定向 —— 要完成请求必须进行更进一步操作

    • 301:moved permanently,永久性重定向,表示资源已被分配了新的 URL
    • 302:found,临时性重定向,表示资源临时被分配了新的 URL
    • 303:see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源
    • 304:not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
    • 301:temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求
  • 4xx:客户端错误——请求有语法错误或请求无法实现

    • 400:bad request,请求报文存在语法错误
    • 401:unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
    • 403:forbidden,表示对请求资源的访问被服务器拒绝
    • 404:not found,表示在服务器上没有找到请求的资源
  • 5xx:服务端错误——服务器未能实现合法的请求

    • 500:internal sever error,表示服务器端在执行请求时发生了错误
    • 501:Not Implemented,表示服务器不支持当前请求所需要的某个功能
    • 503:service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

6、TCP 三次握手和四次挥手的理解

三次握手和四次挥手可以模拟成对讲机通话的过程

  • 三次握手:

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

  • 四次挥手:

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
更多详细内容请查看链接:https://blog.csdn.net/qq_38950316/article/details/81087809

7、HTTPS

HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密。

TLS 中的加密:

  • 对称加密 —— 两边拥有相同的秘钥,两边都知道如何将密文加密解密。
  • 非对称加密 —— 有公钥私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,但是将数据解密必须使用私钥解密,私钥只有分发公钥的一方才知道。

HTTPS 握手过程:

  • 第一步,客户端给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
  • 第二步,服务端确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
  • 第三步,客户端确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务端。
  • 第四步,服务端使用自己的私钥,获取客户端发来的随机数(即Premaster secret)。
  • 第五步,客户端和服务端根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

7、HTTP 2.0的特性

  • 二进制传输:将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码
  • 多路复用:一个 TCP 连接中可以发送多个请求
  • Header 压缩
  • 服务器推送:服务器可以额外的向客户端推送资源,而无需客户端明确的请求

8、用户输入 url 到页面呈现的过程

  • 用户输入url
  • 浏览器查找域名的 IP 地址 域名解析(DNS解析)
  • 找到 IP 地址后,建立 TCP 三次握手 ,与目标服务器建立连接
  • 握手成功后,通过规定的协议(http),浏览器向目标主机发送 http 请求,请求数据包
  • 服务器处理收到的请求,将数据返回至浏览器
  • 浏览器收到 HTTP 响应报文
  • 关闭连接 浏览器解析文档
  • 读取页面内容,浏览器渲染,解析html源码
  • 生成 Dom 树、解析 css 样式、js 交互
  • 在生成 Render 树的过程中,浏览器就开始调用 GPU 绘制,合成图层,将内容显示在屏幕上了

你可能感兴趣的:(前端面试题,网络基础,前端面试题)