1:什么是跨域?为什么会出现跨域?解决方案有哪些?*
跨域是指浏览器不能执行其它网站的脚本。浏览器为了防止受到攻击,有了同源策略(协议+域名+端口)限制,本页面与被请求的页面URL中协议、域名、端口有一个不同时,就会出现跨域问题。
CORS跨域资源共享(Cross-Origin Resource Sharing)方法:
核心就是设置头部Access-Control-Allow-Oringin.
服务器语言是Node.js的方法:配置cors(npm i cors)
const cors =require('cors');
app.use(
cors({
origin:"*",//*表示允许所有源
methods:['GET','POST']//表示允许的方法
})
)
jsonp(JSON with Padding)方法:
原理是src不受跨域影响。所以让后台返回一个js文件,js里的代码包含数据。一般就是前端写个函数,把函数名告诉后端,后端返回一段js文件,里边内容为执行这个函数并传参,参数就是要返回的数据。只支持GET方法。
jQuery中的jsonp只需要加上 dataType:‘jsonp’
同源策略的限制范围
不能获取不同源的 cookie,LocalStorage 和 indexDB
不能获取不同源的 DOM()
不能发送不同源的 ajax 请求 (可以向不同源的服务器发起请求,但是返回的数据会被浏览器拦截)
2:OSI七层模型(TCP/IP5层参考模型)
开放系统互连参考模型 (Open System Interconnect 简称OSI)
应用层,应用层给应用程序提供了接口,使应用程序接入到网络。
DNS(域名解析协议):将域名解析为IP地址
HTTP(超文本传输协议):规定web服务端和客户端的数据传输格式
HTTPS(超文本传输安全协议):是HTTP加上TLS/SSL协议构成的可加密传输的网络协议
FTP(文件传输协议)
NFS(网络文件系统)
TELENT
表示层,负责数据格式的转换。LPP
(轻量级会话协议)
会话层,负责建立、维护、终止会话连接,提供会话管理服务等。LDAP
(轻型目录访问协议)
传输层,负责传送完整的报文,并进行流量控制和差错控制。TCP
(传输控制协议)UDP
(用户数据报协议):
网络层,负责路由、传送分组。IP
(网络互联协议)ICMP
(Internet控制报文协议)ICMPv6
(互联网控制信息协议版本六)
数据链路层,负责传送帧。VLAN
(虚拟局域网):STP
(生成树协议)WIFI
(无线通信技术)PPP
(点对点协议)HDLC
(高级数据链路控制)
物理层,负责传送比特。
3:HTTP请求方法
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获得报文首部
DELETE:删除文件
OPTIONS:询问支持的方法
TRACE:追踪路径
CONNECT:要求用隧道协议连接代理
LINK:建立和资源之间的联系
UNLINE:断开连接关系
4:session认证和token认证
基于Session认证方式的流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话),而发给客户端的 sesssion_id 存放到 cookie 中,这样用客户端请求时带上 session_id 就可以验证服务器端是否存在 session 数据,以此完成用户的合法校验。当用户退出系统或session过期销毁时,客户端的session_id也就无效了。
token认证流程:
1、客户端使用用户名和密码请求登录
2、服务端收到请求,验证用户名和密码
3、验证成功后,服务端会签发一个token,再把这个token返回给客户端
4、客户端收到token后可以把它存储起来,比如放到cookie中
5、客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie或者header中携带
服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求数据
5:ES6新特性有哪些?
let 声明变量、const声明常量、解构赋值、模板字符串、对象的简化写法、箭头函数、函数参数的默认值设置、rest参数、扩展运算符、迭代器、生成器、promise和proxy等
6:哪些数组方法能改变原数组?
1.sort();返回改变数组
2.reverse();返回改变数组
3.pop();返回弹出元素
4.push();返回插入数组的长度
5.shift();返回弹出元素
6.unshift();返回插入数组的长度
7.splice();返回删除的元素
7:什么是回调函数?
被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数。简单来说就是一个函数作为另一个函数的参数。
8:什么是闭包?
概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域。
简单来说:内层函数+引用的外层函数变量=闭包
1、外部能够访问函数内部变量
2、局部变量会常驻在内存中不会被垃圾回收机制回收
3、可以避免使用全局变量,防止全局变量污染
4、可能会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
9:防抖?节流?
防抖(debounce):指在一段时间内,函数被触发多次,只执行一次,多个函数只响应一次。适用于提交表单,输入框输入验证等。
节流(throttle):指持续触发某个事件时,会有规律的间隔一段时间执行函数,多个函数按时间做平均分配触发。适用于DOM元素拖拽等。
10:浮动与定位的区别
设置了浮动的元素,仍旧处于标准文档流中 意味着它会占据标准文档流中的空间,对周围的元素产生影响。当元素没有设置宽度,而设置了浮动属性,元素的宽度随内容的变化而变化,当元素设置浮动属性后,会对相邻的元素产生影响, 相邻元素特指紧邻后面的元素
当一个元素使用绝对定位后,它的位置将依据浏览器左上角开始计算或相对于父容器(在父容器使用相对定位时)。 绝对定位使元素脱离文档流,因此不占据空间。普通文档流中元素的布局就当绝对定位的元素不存在时一样。因为绝对定位的框与文档流无关,所以它们可以覆盖页面上的其他元素。