前后端通信面试知识

279 阅读5分钟

从输入URL到渲染的全过程

URL解析

URL中包含协议,域名,端口,路径,查询字符串或关键字(当其为中文时编码后使用

缓存

首先检查强缓存是否过期,如果没有过期则直接使用强缓存并且返回200;

如果强缓存过期则使用协商缓存,协商缓存由服务器去决定是否使用,如果使用协商缓存返回304;

如果不使用协商缓存或缓存失效,则重新返回资源并且放入缓存。

DNS解析

DNS:是把域名和ip地址相互映射的分布式数据库,由于ip地址的难以记忆,简单的域名让用户更好的记忆。

DNS解析:是通过域名去获取IP地址的过程。

DNS缓存:浏览器,操作系统,路由器,根域名服务器,本地DNS都会对DNS做出缓存

DNS解析的过程:首先查找浏览器缓存,之后是调用gethostbyname函数库去查询本地hosts文件,如果本地hosts文件无响应的映射,就去查找路由缓存,之后是本地服务器缓存,最后是根域名服务器缓存。

建立TCP连接

建立连接的三次握手:

1.首先客户端向服务端发送一个带SYN标识的TCP报文。

2.服务端会返回给客户端带标志的SYN,并且询问客户端是否准备好通信。

3.客户端告诉服务端我已准备好通信,则建立TCP连接。

客户端发送请求

建立TCP连接之后,客户端会根据要求发送相应的请求;

由请求行,请求头和请求体组成;

服务器响应请求

1xx:指示信息–表示请求已接收,继续处理。

2xx:成功–表示请求已被成功接收、理解、接受。

3xx:重定向–要完成请求必须进行更进一步的操作。

4xx:客户端错误–请求有语法错误或请求无法实现。

5xx:服务器端错误–服务器未能实现合法的请求。

TCP断开连接

断开连接的四次挥手:

1.客户端向服务端发送一个标记为FIN-1(finally的简称),并且客户端处于一种半关闭的状态,客户端向服务端发送的通道已经关闭,但是接受服务端的通道仍打开。

2.服务器接受到连接释放的报文,会发出确认报文,其中包含ACK=1,ACK=u+1并且会带上自己的序列seq=v,此时服务端就进入了关闭等待的状态,并且通知服务器高层,客户端已经没有数据要像服务器发送了。

3.服务器将最后的数据发送给客户端,只会就回向客户端发送连接释放报文,服务器此时处于等待关闭的状态。

4.客户端收到服务器发送的连接释放返回确定消息。

浏览器解析渲染

1.解析html,生成dom树,解析CSS,生成CSS规则树。

2.合成CSS树和DOM树,生成render树。

3.布局render树,绘制render树。

4.将各层信息发送给GPU,之后用户就能够看到网页了。

重绘与回流

回流是指元素的尺寸,位置,内容等发生了变化之后,需要重新计算样式和render树。

重绘是指元素的外观颜色上发生了变化,只需要重新应用新样式更新这个元素即可。

跨域

跨域的原因

跨域指的是浏览器不执行其他网站的脚本,这是由于浏览器的同源造成的。

同源是指协议,域名和端口完全相同。

解决跨域的方法(常用

开发环境中:

1.配置webpack中的devserve中的proxy来实现代理解决跨域。

2.使用代理工具filddler。

线上环境:

1.后端配置跨域。

2.设置script标签。

HTTP与HTTPS的区别

1.HTTPS需要CA证书,在申请是需要一定的费用。

2.HTTP是超文本传输协议,是明文传输,对账号密码等信息不保密,HTTPS是具有安全性的SSL加密传输协议。

3.二者的连接方式完全不同,端口也不同,HTTP用的是80端口,HTTPS用的是443端口。

4.HTTP的连接是无连接状态(无连接是指数据的发送,接收,传输都是相互独立的),HTTPS是SSL+HTTP加密传输的,他会经过身份的认证。

前端常见的安全问题

XSS攻击

攻击方式:跨站攻击脚本,攻击者通过提交恶意代码来获取用户的账号密码等安全信息。

防御方式:

1.进行输入输出的检测。

2.避免内联事件的出现。

3.当出现富文本时,建立标签白名单,禁用一些代码。

4.增加验证码。

CSRF攻击

攻击方式:跨站伪造请求,攻击者通过获取用户的登录状态,然后利用用户的身份去进行网站的API请求。

防御方式:

1.在请求API时加入token验证的方式,每次在请求接口时进行token的验证,验证是否来自于后端的返回,验证该token是否过期。

2.每次请求API时尽可能使用post请求,进行对refer的监控,当refer来自第三方网站时阻止该请求。

点击劫持

攻击方式:在web页面下藏了一个透明的iframe,用外层假页面来诱导用户点击,实际上是触发了iframe的一些操作。

防御方式:服务端设置X-X-Frame-Options:DENY来让浏览器禁止iframe的嵌套,该方法必须配合于HTTPS协议下。