浏览器网络相干:
OSI的七层模型、TCP/IP四层模型
- TCP的三次握手(为什么要三次握手,一次呢?四次挥手是什么?)
- 输出URL到页面加载实现须要哪几步?
- TCP和UDP的区别
- 报文
- HTTP的特点?(疾速灵便,为什么用http不必其余的?)
- HTTP有哪些办法?罕用有哪些?
- get和post的区别是什么?
- options的作用?
- HTTP状态码?
- http1和http2的区别?
- 讲出至多五种解决跨域的方法,jsonp(写一个繁难jsonp),CORS
- jsonp的优缺点?
- http和https的区别
- http缓存都有哪些,强缓存和协商缓存有什么区别
- localStorage 与 sessionStorage 与cookie的区别总结
- 什么是同源策略,为什么呈现跨域问题?申请形式,域名和端口不同
- 什么是事件委托,事件捕捉
- DNS缓存,原理
- WebSocket属于什么(简略利用API),原理
OSI的七层模型、TCP/IP四层模型
- TCP的三次握手(为什么是三次握手,一次呢?四次挥手是什么?)
- 输出URL到页面加载实现须要哪几步?
- TCP和UDP的区别
- OSI的七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
- TCP/IP:网络接口层/链路层、网络互联层、传输层、应用层。
1.1 TCP三次握手
https://www.jianshu.com/p/f1b3decb07f8
- 客户端向服务器发送SYN包,期待服务器确认;
- 服务器收到SYN包,须要确认后向客户端发动一个SYN包;
- 客户端收到服务器的SYN+ACK包后则向服务器发动确认包,实现三次握手。
为什么不能一次或两次?
因为客户端和服务器都要做好发送数据的筹备后,能力建设通信。避免了服务器端的始终期待而浪费资源。
tcp是一个全双工的协定,意思是客户端和服务端之间的通信能够同时来回流动,为了保障通信的可靠性以及确定对方能收到本人的申请,tcp采纳半敞开准则,意思是在收到一个申请后必须发送回复申请,只通信一次或者两次无奈确定对方是否收到申请
- 1.1 四次挥手其性质为终止协定
- TCP客户端发送一个FIN,用来敞开客户到服务器的数据传送。
- 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
- 服务器敞开客户端的连贯,发送一个FIN给客户端。
- 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
保证数据接管残缺。
1.2 输出URL到页面加载实现须要哪几步?
- 输出网址URL
- 是url还是字符串 搜索引擎
- 缓存机制,判断本地是否有缓存,
- 没有缓存,DNS解析(解析失去IP),https建设TLS连贯
- 解析的时候,服务器负载平衡
- TCP连贯(三次握手)
- 发送http申请(申请办法,get、post)
- 承受响应,判断状态码抉择解决形式(返回http状态码)
- 判断缓存
- 解码
- 渲染
- 连贯完结(四次挥手)
- 下载html dom树,下载css OM树,联合rander树
参考:https://zhuanlan.zhihu.com/p/34288735
https://mp.weixin.qq.com/s?__...
1.3 TCP和UDP的区别
- TCP:一对一;面向连贯;面向字节流;传输大量数据;速度慢;(web开发,http)
- 长处:牢靠,通过TCP连贯传输的数据无差错、不失落、不反复,并且可能按序达到。
- UDP:一对多;面向非连贯(发送数据前不须要建设连贯);面向报文;传输大量数据,速度快;(利用:直播,视频,应用程序)
- 毛病:不保障交付牢靠,丢包。
报文
1. 申请报文(发送申请的报文):
- 申请头Request Headers:
- Accept :申请报文可通过一个“Accept”报文头属性通知服务端 客户端承受什么类型的响应。
- Cookie :客户端的Cookie就是通过这个报文头属性传给服务端的哦!
- Referer :示意这个申请是从哪个URL过去的
- Cache-Control :对缓存进行管制,如一个申请心愿响应返回的内容在客户端要被缓存一年,或不心愿被缓存就能够通过这个报文头达到目标。
- 申请行:
- HTTP办法,get/post申请
- HTTP协定
- 申请体:
2. 响应报文(服务端相应的报文)
状态行,响应首部,内容实体,
HTTP协定的次要特点?(疾速灵便,为什么用http不必其余的?)
http是超文本传输协定,应用层协定的一种,应用层协定:DNS、FTP、SMTP、HTTP、SNMP、Telnet。
特点:简略疾速灵便,属于应用层的面向对象的协定,基于TCP的牢靠传输。
http是不保留状态的协定(无状态协定)
HTTP有哪些办法?罕用有哪些?
- GET(获取)
- POST(传输)
- PUT(更新)
- DELETE(删除)
- HEAD(获取报文首部)
- OPTIONS(询问)
- CONNECT
get和post的区别是什么?
- 数据类型:get只承受ASCII字符,而post没有限度,容许二进制。
- 后退/后退:get在浏览器回退/刷新时是有害的,而post会再次提交申请。
- 申请长度:get长度取决于浏览器窗口的长度,post长度不限度
- 缓存:get能被缓存,post不能。
- 申请次数:get申请一次(申请头申请体一起发送),post申请两次(先发送申请头,等100 continue,而后再发送申请体,连着发送)。
- 安全性:post比get 更平安,因为GET参数间接裸露在URL上,POST参数在HTTP消https息主体中,而且不会被保留在浏览器历史或 web 服务器日志中,。
- 编码格局:post反对多种编码格局 gbk utf-8
- GET产生一个TCP数据包,浏览器会把http header 和 data 一并发送
- POST产生两个TCP数据包(除了FireFox)先发送header,浏览器响应100 continue,浏览器再发送data
specification : 相干的RFC,
options的作用?
- 检测服务器所反对的申请办法
- CORS中的预检申请(检测某个接口是否反对跨域)
HTTP状态码,http响应,信息响应?
- 1结尾:承受持续解决,(100 continue)
- 2结尾:示意胜利 (200胜利并返回 201已创立 202接管 203胜利未受权 204胜利无内容)
- 3结尾:重定向(301永恒重定向,302长期重定向,304有缓存不必更新)
- 4结尾:客户端谬误(400语法错误,403禁止被拜访,没有权限,404资源页面不存在)
- 5结尾:服务端谬误(500后端服务器挂了,501服务器不反对无奈解决,502网关谬误,后盾建设连贯超时,503服务器外部谬误,504后盾未建设连贯超时,505不反对http协定版本)
https://mp.weixin.qq.com/s?__...
URI 一个资源文件的不同辨示意办法
- URI:对立资源标识符
- URL:对立资源定位符
- URN:对立资源名称
串行连贯 长久连贯 管道化长久连贯 HTTP2.0多路复用
- 串行连贯: http1.0版本,每次发申请都要建设新的TCP连贯,每次通信后都要断开TCP连贯。
- 长久连贯:http1.1,连段没有提出断开连接,则放弃长久TCP连贯。
- 管道化长久连贯: 不必期待响应返回而发送下个申请并按数据返回响应。
- HTTP2.0多路复用:http2.0
- websocket: HTML5,客户端被动向服务器发申请,建设连贯后。
http1和http2的区别? 超文本传输协定
影响一个 HTTP 网络申请的因素次要有两个:带宽和提早。
浏览器为每个域名最多同时保护6条TCP长久连贯。
影响http1.1效率的因素是TCP启动慢,多条TCP竞争带宽,呈现队头阻塞的问题,为了解决这个问题,http2采纳通过引进二进制分帧层,多路复用,服务器推送,头部压缩。
1)在HTTP 1.0中,客户端的每次申请都要求建设一次独自的连贯,在解决完本次申请后,就主动开释连贯。
2)在HTTP 1.1中则能够在一次连贯中解决多个申请,并且多个申请能够重叠进行,不须要期待一个申请完结后再发送下一个申请。采纳了keep-alive。
http1的次要问题:
- 第一个起因,TCP 的慢启动,因为三次握手。
- 第二个起因,同时开启了多条 TCP 连贯,那么这些连贯会相互竞争固定的带宽。
- 第三个起因,HTTP/1.1 队头阻塞的问题,只有一个TCP管道。
http1.1:
减少了长久连贯;
浏览器每个域名同时保护6个TCP长久连贯。
毛病:对带宽的利用率不强,(每秒最大发送接管的字节数)
http2:
- 解决方案:要解决一个域名只应用一个TCP 长连贯和打消队头阻塞问题。
- 长处:能够设置申请的优先级,反对服务器推送,大幅度的晋升了 web 性能。
- 问题:队头阻塞无奈解决,丢包率减少()
区别:http2采纳通过引入二进制分帧层,
- 多路复用机制(MultiPlexing):在TLS层,减少一个二进制分帧层,
TLS协定是会话层的平安传输协定,
即连贯共享,即每一个request都是是用作连贯共享机制的。一个request对应一个id,这样一个连贯上能够有多个request,每个连贯的request能够随机的混淆在一起,接管方能够依据request的 id将request再归属到各自不同的服务端申请外面。
- 新的二进制格局(Binary Format),将申请分帧传输,能够进行二进制分帧层,HTTP1.x的解析是基于文本。基于文本协定的格局解析存在人造缺点,文本的表现形式有多样性,要做到健壮性思考的场景必然很多,二进制则不同,只认0和1的组合。基于这种思考HTTP2.0的协定解析决定采纳二进制格局,实现不便且强壮。
二进制分帧层:分段带ID传输。
- 头部压缩,对申请头和响应头进行压缩,减小体积。
- 服务器推送(server push),同SPDY一样,HTTP2.0也具备server push性能。
- 设置申请的优先级:
- HTTP2的长久连贯和管线化:
http3:
HTTP3:基于UDP协定推出一个QUIC协定,
在UDP根底上新增多路复用,0-RTT,应用TLS1.3加密,流量管制,有序交付,重传等。
- 防止包阻塞:
- 疾速重启会话:
什么是浏览器同源策略?为什么会呈现跨域问题?(申请形式,域名和端口不同)
- 一种安全策略,爱护本地数据,为了避免XSS、CSFR等攻打。
- 同源的定义:协定(申请形式)、域名、端口雷同。因为存在浏览器同源策略,所以才会有跨域问题。
- 同源策略分为两种:
DOM 同源策略:禁止对不同源页面 DOM 进行操作。这里次要场景是 iframe 跨域的状况,不同域名的 iframe 是限度相互拜访的。
XMLHttpRequest 同源策略:禁止应用 XHR 对象向不同源的服务器地址发动 HTTP 申请。
浏览器同源策略:https://www.cnblogs.com/laixiangran/p/9064769.html
理解预检申请嘛?
- 跨域是指一个域下的文档或脚本试图去申请另一个域下的资源
- 避免XSS、CSFR等攻打, 协定+域名+端口不同
- jsonp; 跨域资源共享(CORS)(Access control); 服务器正向代理等
预检申请: 需预检的申请要求必须首先应用 OPTIONS 办法发动一个预检申请到服务器,以获知服务器是否容许该理论申请。"预检申请“的应用,能够防止跨域申请对服务器的用户数据产生未预期的影响
代理服务器
代理服务器:客户端和服务端之间的中间商,能够作为缓存服务器。
- 正向代理:
- 反向代理:
- 反向代理解决跨域问题:两个服务器之间通信。
本地服务器在浏览器向本地服务发动申请》本地代理转发》指标服务器》响应数据后通过代理伪装成本地服务器申请的返回值》浏览器接管到指标服务器的数据
- vue的proxyTable的作用,解决跨域问题。怎么实现。
与服务器联调的时候 vue.config.js, proxy设置申请反向代理
缓存服务器:频繁拜访网络内容。进步访问速度。浏览器和原服务器之间的两头服务器。
解决跨域的方法,罕用:
jsonp 跨域:
jsonp 跨域通过script的src获取callback申请资源进行文件的传输,而后返回一个函数调用;
- 长处:兼容性好(兼容IE)
- 毛病:只反对get一种申请,不是官网API,容易受到xss攻打。
- 原理:script的src属性默认反对跨域
跨域资源共享(CORS):批改响应头
- 跨域资源共享(CORS)容许浏览器跨源服务器,须要浏览器和服务器同时反对,须要在服务器上配置Access-Control-Allow-Origon。
*不能带cookie
- 简略申请:申请形式:get、post、head
- 非简略申请:先发一次预检申请(options):put、delete
options是预检申请,在真正的申请发送进来之前,浏览器会先发送一个options申请向服务询问此接口是否容许我拜访
浏览器在以后实在申请是非简略申请且跨域的状况下会发动options预检申请
与JSONP相比:
- JSONP只反对get申请,cors反对所有申请(get、post);
- JSONP支持性好,兼容老版本浏览器。
参考:http://www.ruanyifeng.com/blog/2016/04/cors.html
hash: window.location
hash:location.hash + iframe;
postMessage:
postMessage()办法容许来自不同源的脚本采纳异步形式进行无限的通信,能够实现跨文本档、多窗口、跨域消息传递。
Awindow.postMessage(data,origin)
A窗口向B窗口发送申请:Awindow.postMessage('data','http://B.com')
WebSocket协定跨域:
WebSocket协定跨域:HTML5一种新的长久化协定,用于H5聊天,即时线上跨域。
实时聊天,基于TCP协定,短轮询,节约带宽,
长轮询,
http单向数据流,websocket链接客户端和服务器,在ws里
scoket.io
WebSocket心跳检测
不罕用:
nginx反向代理接口跨域:
同源策略是浏览器的安全策略,不是HTTP协定的一部分。服务器端调用HTTP接口只是应用HTTP协定,不会执行JS脚本,不须要同源策略,也就不存在逾越问题
document.domain + iframe跨域:
两个页面都通过js强制设置document.domain为根底主域,就实现了同域.然而仅限主域雷同,子域不同的跨域利用场景
http和https的区别
http:因为http是无状态,明文传输的,容易造成中间人攻打,所以在http协定中退出平安层,退出SSL/TLS平安层,减少加密/解密的形式,相比http协定更平安。
SSL/TLS平安层:对发动 HTTP 申请的数据进行加密操作和对接管到HTTP 的内容进行解密操作。
TLS/SSL 的性能实现次要依赖于三类根本算法:散列函数 、对称加密和非对称加密散列函数 ,散列算法,MD5
RSA算法
https:平安,申请工夫长,加载慢,花钱,证书
https安全性:
- 对称加密:加密和解密应用的密钥是雷同的
- 传输方式:
浏览器:发送加密套件列表和一个随机数 client-random,
服务器:从加密套件列表中选取一个加密套件,还会生成一个随机数 service-random,并将service-random 和加密套件列表返回给浏览器。最初浏览器和服务器别离返回确认音讯。
- 毛病:容易被破解
- 非对称加密:A、B两把密钥,公钥,私钥
毛病:效率低,影响速度,无奈保障服务器到浏览器的平安
- 对称加密+非对称加密:用非对称加密的形式 传输 对称加密里的密钥,
非对称加密应用时,生成pre-master(两个随机数计算)。
长处:速度快+平安。
- 增加数字证书(生产):向CA证书机构申请数字证书,蕴含数字签名,非对称加密的公钥和个人信息。
证书的作用:一个是通过数字证书向浏览器证实服务器的身份,另一个是数字证书外面蕴含了服务器公钥。
证书也有公钥和私钥。证书加密一次,
CA证书用公钥,hash值,。
加密套件列表:客户端反对的加密和非对称加密的形式
- 浏览器如何验证数字证书
- 有了 CA 签名过的数字证书,当浏览器向服务器发出请求时,服务器会返回数字证书给浏览器。浏览器接管到数字证书之后,会对数字证书进行验证。
- 首先浏览器读取证书中相干的明文信息,采纳 CA 签名时雷同的 Hash 函数来计算并失去信息摘要 A;而后再利用对应 CA 的公钥解密签名数据,失去信息摘要 B;比照信息摘要 A 和信息摘要 B,如果统一,则能够确认证书是非法的,
- 即证实了这个服务器是极客工夫的;同时浏览器还会验证证书相干的域名信息、无效工夫等信息。
- 区别:
- HTTP 的URL 以http:// 结尾,而HTTPS 的URL 以https:// 结尾
- HTTP 是不平安的,而 HTTPS 是平安的
- HTTP 规范端口是80 ,而 HTTPS 的规范端口是443
- 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的平安传输机制工作在传输层
- HTTP 无奈加密,而HTTPS 对传输的数据进行加密
- HTTP无需证书,而HTTPS 须要CA机构wosign的颁发的SSL证书
https是如何加密的?
密钥传输的过程,服务器做了什么事?浏览器做了什么事?密钥怎么传的?对称加密要怎么传?数字证书怎么校验?
常见加密算法有哪些?
浏览器缓存,强缓存和协商缓存有什么区别
https://mp.weixin.qq.com/s/Wvc0lkLpgyEW_u7bbMdvpQ
缓存地位:
- service worker:浏览器背地的独立线程,个别缓存
- memory chache:内存中的缓存,计算机内存
- Disk Cache:硬盘中的内存,速度慢
- Push Cache:推送缓存,http2,只在session中存在
- 缓存过程:
- 缓存机制:
- 缓存机制分为:强缓存和协商缓存
- 区别:是否发送申请,强缓存不发送申请,协商缓存至多发送一次申请。
- 优先级: Cache-Control > expires > Etag > Last-Modified
强缓存(本地缓存):不必跟服务器进行通信
- 缓存字段:Expires和Cache-Control
- Expires:相对工夫,资源生效的工夫,
- Cache-Control:绝对工夫,资源缓存的最大无效工夫
- Cache-Control的 max-age 优先级高于 Expires
协商缓存:由服务器来决定是否应用缓存,至多和服务器有一次通信
- 缓存字段:Last-Modified和ETag发送到服务器,确认资源是否更新。
- Last-Modified 示意本地文件最初批改日期
- ETag 是个标识,修没批改
- 判断是否过期,先走etags(http1生成的),再走Last-Modified。 ETag 优先级比 Last-Modified 高。
页面怎么进行强缓存和协商缓存?
如果缓存过期了,咱们就能够应用协商缓存来解决问题。协商缓存须要申请,如果缓存无效会返回 304。
协商缓存须要客户端和服务端独特实现,和强缓存一样,也有两种实现形式。
Last-Modified 和 If-Modified-Since
If-Modified-Since 会将 Last-Modified 的值发送给服务器,询问服务器在该日期后资源是否有更新,有更新的话就会将新的资源发送回来。
参考:https://zhuanlan.zhihu.com/p/64635421
如果浏览器命中强缓存,则不须要给服务器发申请;而协商缓存最终由服务器来决定是否应用缓存,即客户端与服务器之间存在一次通信。
在 chrome 中强缓存(尽管没有收回实在的 http 申请)的申请状态码返回是 200 (from cache);而协商缓存如果命中走缓存的话,申请的状态码是 304 (not modified)。 不同浏览器的策略不同,在 Fire Fox中,from cache 状态码是 304.
浏览器会获取该缓存资源的 header 中的信息,依据 response header 中的 expires 和 cache-control 来判断是否命中强缓存,如果命中则间接从缓存中获取资源。
如果没有命中强缓存,浏览器就会发送申请到服务器,这次申请会带上 IF-Modified-Since 或者 IF-None-Match, 它们的值别离是第一次申请返回 Last-Modified或者 Etag,由服务器来比照这一对字段来判断是否命中。IF-None-Match是false时 ,则服务器返回 304 状态码,
IF-None-Match是true时,走200
并且不会返回资源内容,浏览器会间接从缓存获取;否则服务器最终会返回资源的理论内容,并更新 header 中的相干缓存字段。
keep-alive:HTTP 长连贯
- 是客户端和服务端的一个约定,如果开启 keep-alive,则服务端在返回 response 后不敞开 TCP 连贯;同样的,在接管完响应报文后,客户端也不敞开连贯,发送下一个 HTTP 申请时会重用该连贯。
- http1.0默认敞开的,须要在http头退出"Connection: Keep-Alive”,能力启用Keep-Alive
- http1.0默认开启keep-alive。
- 浏览器默认开启keep-alive,
http缓存都有哪些,
https://juejin.im/post/68449036824551096[](https://juejin.im/post/684490...
#heading-38
- http缓存、websql、indexDB、cookie、localstorage、sessionstorage、application cache、cacheStorage、flash缓存
localStorage 与 sessionStorage 与cookie补充:
https://mp.weixin.qq.com/s?__...
https://zhuanlan.zhihu.com/p/159268611
cookie
localStorage
sessionStorage
存储大小
个别不超过4K
个别为5M
个别为5M
数据有效期
可设置生效工夫,默认敞开浏览器生效
永恒无效,除了手动革除
敞开页面失效
作用域
所有同源窗口共享
所有同源窗口共享
只在同浏览器共享
易用性
须要本人封装,原生的cookie接口不敌对
原生接口能够承受,能够封装来对Object和Array有更好的反对
与服务端通信
每次会随http协定头带过来,cookie保留太多数据会带来性能问题
在申请时应用数据,不参加服务器通信
贮存类型string
(补充:cookie通过http协定头带过来的)
indexDB存储大小无下限 贮存类型键值对, 不能跨域 时效性
CSRF攻打 跨站申请伪造
https://mp.weixin.qq.com/s?__...
跨站伪造申请
- 概念:攻击者盗用你的身份,以你的名义发送歹意申请,比方:通过生疏连贯,诱导用户点击。
CSRF如何产生的?
- 用户信息存在cookie中,黑客通过贮存token
- 如何避免CSRF攻打?
- 在服务端做解决,尽量应用post申请,退出验证码,验证Referer
- 应用Cookie的SameSite属性:strict、lax(绝对宽松)、none
- 验证起源地址:origin(不蕴含门路信息)和refer
- 退出CSRF token:
- 判断申请的起源:检测Referer(并不平安,Referer能够被更改)
- CSRF主动进攻策略:同源检测(Origin 和 Referer 验证)。
- CSRF主动防御措施:Token验证 或者 双重Cookie验证 以及配合Samesite Cookie。
- 保障页面的幂等性,后端接口不要在GET页面中做用户操作。
判断origin,没有再判断验证refer字段,申请。
Origin Header
Referer Header
然而Origin在以下两种状况下并不存在:
IE11同源策略: 302重定向:
XSS攻打 跨站脚本攻打
XSS(Cross-Site Scripting,跨站脚本攻打)是一种代码注入攻打。攻击者在指标网站上注入恶意代码,当被攻击者登陆网站时就会执行这些恶意代码,这些脚本能够读取 cookie,session tokens,或者其它敏感的网站信息,对用户进行钓鱼欺诈,甚至发动蠕虫攻打等。
XSS 的实质是:恶意代码未经过滤,与网站失常的代码混在一起;浏览器无奈分辨哪些脚本是可信的,导致歹意脚本被执行。因为间接在用户的终端执行,恶意代码可能间接获取用户的信息,利用这些信息假冒用户向网站发动攻击者定义的申请。
类型:
- 反射型XSS:通过 URL 传递参数,当用户点击一个歹意链接,或者提交一个表单,或者进入一个歹意网站时,注入脚本进入被攻击者的网站。Web服务器将注入脚本,比方一个错误信息,搜寻后果等,未进行过滤间接返回到用户的浏览器上。
- 如何进攻:本义对url的查问参数进行本义后再输入到页面。
- DOM 型 XSS:html,前端代码不标准。
- 如何进攻:本义图片链接。
- 存储型XSS:数据库,将恶意代码提交到指标网站的数据库中。
- 如何进攻:服务器接管到数据,在存储到数据库之前,进行本义/过滤、
- SQL 注入:
如何让预防xss攻打?
- 服务端过滤做验证,在服务端应用 HTTP的 Content-Security-Policy 头部来指定策略,或者在前端设置 meta 标签;
- 服务端设置 CSP:开启白名单
- 后端设置HttpOnly:HttpOnly解决的是XSS后的Cookie劫持攻打,只能升高受损范畴
- 对输出的内容和长度做限度:只能减少 XSS 攻打的难度。
jsonp过滤同域的代码有破绽
点击劫持
点击劫持:攻击者将须要攻打的网站通过iframe嵌入本人的网页中,诱导用户点击,暗藏了一个通明的iframe,用外层假页面诱导用户点击。
进攻方法:
- deny
- frame busting
- 应用X-Frame-Options协定头:微软提供,用来进攻利用iframe嵌套的点击劫持攻打
- same origin:同源下的iframe
- allow-from-origin:
中间人攻打
https对称加密,非对称加密,混合加密,证书最为无效避免中间人攻打。
https://blog.csdn.net/oZhuZhiYuan/article/details/106650944
cookie session token,为什么能通过cookie攻打,不能通过token攻打
https://mp.weixin.qq.com/s/diaE6WkB_UJxjuhLS9E20Q
- cookie存在浏览器 session存在服务器 token明文传输,没有固定寄存的中央
- cookie不是很平安,session更平安。cookie容易被攻打。
- 设置cookie工夫过期,应用session-destory销毁对话。
- 发送申请时会带cookie,不会主动带token
- token存储在cookie中,token能够进攻 csrf攻打
- xss攻打
- token如何进行加密?
垃圾回收
V8 实现了精确式 GC,GC 算法采纳了分代式垃圾回收机制。因而,V8 将内存(堆)分为新生代和老生代两局部。
新生代:
- 存活工夫短,应用 Scavenge GC 算法
- 内存空间:from空间和to空间。
- 三次折叠持续应用的放在老生代里
- 清理的过程:对象区域和闲暇区域进行翻转。
- 新申明放在对象区,应用频率比拟低的放在闲暇区
老生代:
- 存活工夫长且数量多,应用:标记革除算法和标记压缩算法。
- to空间(占比大小超过25%),标记整顿算法。
- 对象树形构造,依据援用指向 被调用的对象 没有被标记的会被革除。
- 空间不间断的会整合。
怎么解决全进展?
- 垃圾清理走的主线程,清理垃圾会造成卡顿,为了避免卡顿,会将垃圾分为很多份清理。逐步插在主线程内。
为了升高老生代的垃圾回收而造成的卡顿,V8 将标记过程分为一个个的子标记过程,同时
让垃圾回收标记和 JavaScript 应用逻辑交替进行,直到标记阶段实现,咱们把这个算法称
为增量标记(Incremental Marking)算法。
跨标签页通信
内存透露
1.全局变量引起
2.闭包
3.dom清空,事件没有革除
4.子元素存在援用
子元素还存在援用时,先把子元素开释再开释父元素,否则父元素无奈开释。
被忘记的计时器
如何防止内存透露
1.ESLint 检测代码查看非冀望的全局变量。
2.应用闭包的时候,得晓得闭包了什么对象,还有援用闭包的对象何时革除闭包。最好能够防止写出简单的闭包,因为简单的闭包引起的内存透露,如果没有打印内存快照的话,是很难看进去的。
3.绑定事件的时候,肯定得在失当的时候革除事件。在编写一个类的时候,举荐应用 init 函数对类的事件监听进行绑定和资源申请,而后 destroy 函数对事件和占用资源进行开释。
全局变量 没有被申明
无奈被回收 属于内存透露
没有开释的内存
- 事件冒泡、事件捕捉、事件委托: https://www.jianshu.com/p/9c279d7330c6