跨域
1. 何为跨域?
同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
2. 如何解决跨域?
- CORS
- JSONP
- Nginx反向代理
- Node中间件代理
- postMessage
3. 请求发出去了么?
跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。
4. vue项目中proxyTable反向代理原理
浏览器是禁止跨域的,但是服务端不禁止,在本地运行npm run dev等命令时实际上是用node运行了一个服务器,因此proxyTable实际上是将请求发给自己的服务器,再由服务器转发给后台服务器,做了一层代理,因为不会出现跨域问题。
vue-cli的proxyTable用的是http-proxy-middleware中间件
浏览器缓存
- 浏览器发送请求前,根据请求头的expires和cache-control判断是否命中(包括是否过期)强缓存策略,如果命中,直接从缓存获取资源,并不会发送请求。如果没有命中,则进入下一步。
- 没有命中强缓存规则,浏览器会发送请求,根据请求头的last-modified和etag判断是否命中协商缓存,如果命中,直接从缓存获取资源。如果没有命中,则进入下一步。
- 如果前两步都没有命中,则直接从服务端获取资源。
强缓存:
不会向服务器发送请求,直接从缓存中读取资源。强缓存需要服务端设置expires和cache-control。
协商缓存:
协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程。
缓存位置
状态 | 类型 | 说明 |
---|---|---|
200 | form memory cache | 不请求网络资源,资源在内存当中,一般脚本、字体、图片会存在内存当中 |
200 | from disk cache | 不请求网络资源,在磁盘当中,一般非脚本会存在内存当中,如css等 |
200 | 资源大小数值 | 请求服务器下载最新资源 |
304 | 报文大小 | 请求服务端发现资源没有更新,使用本地资源 |
DNS 解析
DNS解析的目的就是找ip地址。
当用户在浏览器输入www.baidu.com并按下回车键后,DNS域名解析过程:
浏览器缓存->系统缓存->路由器缓存->ISP DNS 缓存->递归搜索
闭包
何为闭包?
闭包作用?
闭包缺点
设计模式
设计模式: 重用代码,更易理解,代码工程化;
观察者模式 Observer Pattern
Observer模式也叫观察者模式、订阅/发布模式,是由GoF提出的23种软件设计模式的一种。
Vue2.0使用的该模式
核心思想:观察者只要订阅了被观察者的事件,那么当被观察者的状态改变时,被观察者会主动去通知观察者,而无需关心观察者得到事件后要去做什么,实际程序中可能是执行订阅者的回调函数。
观察者模式包含两种角色:
- 观察者(订阅者)
- 被观察者(发布者)
中介者模式
代理模式
Vue3.0的Proxy使用的改模式
单例模式
工厂模式
装饰者模式
Vuex,state和getters区别,mutation和action区别
性能优化
虚拟DOM
diff算法
Vue中key的作用
圣杯布局&&双飞翼布局
css垂直居中
Vue双向绑定原理(2.0和3.0)
nextTick的原理
keep-alive组件,原理
权限控制
addRouters
vue-router的两种模式
- hash:
- history:需要服务器端支持