从输入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协议下。