31.说说你知道的状态码

  • 2开头的表示成功
  • 一般见到的就是200
  • 3开头的表示重定向
  • 301永久重定向
  • 302临时重定向
  • 304表示可以在缓存中取数据(协商缓存)
  • 4开头表示客户端错误
  • 403跨域
  • 404请求资源不存在
  • 5开头表示服务端错误
  • 500

32.从浏览器输入url后都经历了什么

先进行DNS域名解析,先查看本地hosts文件,查看有没有当前域名对应的ip地址,若有直接发起请求,没有的话会在本地域名服务器去查找,该查找属于递归查找,如果本地域名服务器没查找到,会从根域名服务器查找,该过程属于迭代查找,根域名会告诉你从哪个与服务器查找,最后查找到对应的ip地址后把对应规则保存到本地的hosts文件中。
如果想加速以上及之后的http请求过程的话可以使用缓存服务器CDN,CDN过程如下:
用户输入url地址后,本地DNS会解析url地址,不过会把最终解析权交给CNAME指向的CDN的DNS服务器
CDN的DNS服务器会返回给浏览器一个全局负载均衡IP
用户会根据全局负载均衡IP去请求全局负载均衡服务器
全局负载均衡服务器会根据用户的IP地址,url地址,会告诉用户一个区域负载均衡设备,让用户去请求它。
区域负载均衡服务器会为用户选择一个离用户较近的最优的缓存服务器,并把ip地址给到用户
用户想缓存服务器发送请求,如果请求不到想要的资源的话,会一层层向上一级查找,知道查找到为止。
进行http请求,三次握手四次挥手建立断开连接
服务器处理,可能返回304也可能返回200
返回304说明客户端缓存可用,直接使用客户端缓存即可,该过程属于协商缓存
返回200的话会同时返回对应的数据
客户端自上而下执行代码
其中遇到CSS加载的时候,CSS不会阻塞DOM树的解析,但是会阻塞DOM树的渲染,并且CSS会阻塞下面的JS的执行
然后是JS加载,JS加载会影响DOM的解析,之所以会影响,是因为JS可能会删除添加节点,如果先解析后加载的话,DOM树还得重新解析,性能比较差。如果不想阻塞DOM树的解析的话,可以给script添加一个defer或者async的标签。
defer:不会阻塞DOM解析,等DOM解析完之后在运行,在DOMContentloaed之前
async: 不会阻塞DOM解析,等该资源下载完成之后立刻运行
进行DOM渲染和Render树渲染
获取html并解析为Dom树
解析css并形成一个cssom(css树)
将cssom和dom合并成渲染树(render树)
进行布局(layout)
进行绘制(painting)
回流重绘
回流必将引起重绘,重绘不一定引起回流
原文链接:

33.什么是cdn

status code 302 前端 axios error 前端报302_网络协议

1.首先访问本地的 DNS ,如果没有命中,继续递归或者迭代查找,直到命中拿到对应的 IP 地址。

2.拿到对应的 IP 地址之后服务器端发送请求到目的地址。注意这里返回的不直接是 cdn 服务器的 IP 地址,而是全局负载均衡系统的 IP 地址

4.全局负载均衡系统会根据客户端的 IP地址和请求的 url 和相应的区域负载均衡系统通信

5.区域负载均衡系统拿着这两个东西获取距离客户端最近且有相应资源的cdn 缓存服务器的地址,返回给全局负载均衡系统

6.全局负载均衡系统返回确定的 cdn 缓存服务器的地址给客户端。

7.客户端请求缓存服务器上的文件

简单来说,其实 cdn 就是个放服务端资源的一个仓库。康师傅的泡面如果不是有家门口的小卖部,我们就得去人家的工厂门口拿。有了小卖部,我们只需要去一个卖康师傅&&有货的小卖部拿,就是这个道理。

其中有一个比较重要的点,在过程1里:这个过程中,有一个 CNAME 的过程,我们访问 cdn 资源的地址一般是 a.cloud.com 或者类似的地址,是一个公司的访问 cdn 的专用地址。但是我们用的 cdn 的服务却是第三方的,即其实资源在他们的地址上比如 tencent.cdn。这时候就需要在 dns 查询的时候,需要把我们访问 a.cloud.com的地址映射到 tencent.cdn 的地址上,然后拿着映射后的地址再去走一遍 dns 解析,成功之后才获取到第三方提供的全局负载均衡系统的 IP。再继续走后面的流程。