七月虽然不是一个丰收的季节,但倒是一个十分酷热的月份。不知有多少小伙伴跟我同样,顶着大太阳奔波在各类面试的征途中。面试是一个漫长的过程。可是也是一个让你快速提高的过程。其中包含了无数的血与泪。去面试前首先咱们必须有牢固的基础知识,足够丰富的项目经历(就我而言差很少是三个完整项目经历,时间累计差很少接近一年)。而后就是表述能力,你要能把你的答案给面试官描述清楚,注意专业词汇,这将大大提升面试官对你的印象分!css
学而不思则罔,思而不学则殆。当走完基本全部大厂以后,发现其实每一个公司对基础能力的考察都比较注重,只有基础掌握好了,把前端全部的知识可以一连串的理清。那么无论面试题是什么,均可以游刃有余的去回答。这里就是把我全部面试过的问题的一些底层原理阐述,并不会去描述我在面试中碰到的题目。这样一方面能够帮你过一遍js的基础也能够帮助我加深理解。下面我就分模块的去讲解没一个知识点。篇幅过长,请耐心阅读!!!html
css中的盒子模型包括IE盒子模型和标准的W3C盒子模型。其盒子模型仍是要归宗于box-sizing的属性,盒子模型对应的分被为border-box,content-box。所谓的标准盒子模型(border-box):width = 左右border+左右padding+contentwidth,而咱们的IE盒子模型(border-box): width = content+padding+border 元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。前端
方法一:transform:scaleY(0.5)使用伪元素设置1px的边框,而后对边框进行缩放(scaleY) 实现思路:node
方法二: border-image 设置图片的边框git
Animation和transition大部分属性是相同的,他们都是随时间改变元素的属性值,他们的主要区别是transition须要触发一个事件才能改变属性, 而animation不须要触发任何事件的状况下才会随时间改变属性值,而且transition为2帧,从from .... to,而animation能够一帧一帧的。es6
1.使用flexgithub
在父盒子设置display: flex; justify-content: center;align-items: center
复制代码
2.使用css的transformweb
父盒子设置:display:relative
Div 设置: transform: translate(-50%,-50%);position: absolute;top: 50%;left: 50%;
复制代码
3.display:table-cell面试
父盒子设置:display:table-cell; text-align:center;vertical-align:middle;
Div 设置: display:inline-block;vertical-align:middle;
复制代码
1.给父级元素定义高度 2.让父级元素也浮动 3.父级定义display:table 4.父元素设置overflow:hidden 5.clearfix:使用内容生成的方式清除浮动 .clearfix:after { // :after选择器向选定的元素以后插入内容 content:""; // 生成内容为空 display: block; // 块级元素显示 clear:both; // 清除前面元素 } 不破坏文档流,没有反作用 复制代码
基本的:
1.id选择器(id="name")
2.类选择器(class="head")
3.标签选择器(body, div, ul, li)
4.全局选择器(*)
复杂的:
1.组合选择器(.head .head_logo)
2.后代选择器 (#head .nav ul li 从父集到子孙集)
3.群组选择器 (div, span, img {color:Red} 具备相一样式的标签分组显示)
4.继承选择器
5.伪类选择器(连接样式,a元素的伪类)
6.子选择器(div>p, 带大于号>)
7.CSS相邻相邻兄弟选择器(h1+p, 带加号+)
复制代码
优先级:算法
不一样级别:总结排序:!important > 行内样式 > ID选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性
同一级别:后写的会覆盖先写的
css选择器的解析原则:选择器定位DOM元素是从右往左的方向,这样能够尽早的过滤掉一些没必要要的样式规则和元素
块元素 | 行内元素 |
---|---|
块元素会独占一行,默认状况下,其宽度自动填满父元素宽度 行元素不会占据一行,会一直排在一行,直到一行排不下 | 行元素没有宽度和高度属性,块级元素即便设置了宽度,仍是会独占一行 |
块级元素: div p forn ul li h1-h6 | 行内元素:span img input a i |
注意:对于行内元素,font-size指定 他们的content area的高度,因为inline box = 上下的helf-leading,若是leading为0,在这种状况下,font-size指定了inline box的高度font-size指的是字体的高度,可是不能指定每一个字形给定字体高度下的实际高度,致使了span的高度大于line-height
设置宽高,而后用border去画
width: 0;
height: 0;
border-bottom: 100px solid cyan;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
复制代码
visibility:hidden、display:none、z-index=-一、opacity:0
可是随着JS技术的发展,JS也开始承担页面渲染的工做。好比咱们的UI其实能够分被对待,把渲染页面的js放在前面,时间处理的js放在后面
能够简单的使一个元素居中(包括水平和垂直居中)栅格式系统布局,bootstrap grid
三栏是布局(两边两栏宽度固定,中间栏宽度自适应)
行内元素居中(父元素text-align:center)
块状元素居中(块状元素没发用text-align)
1.宽度必定:margin:auto
2.宽度不定:块级变行内,而后在父上text-aligin
复制代码
理解:BFC是css布局的一个概念,是一块独立的渲染区域,一个环境,里面的元素不会影响到外部的元素
如何生成BFC:(脱离文档流)
【1】根元素,即HTML元素(最大的一个BFC)
【2】float的值不为none
【3】position的值为absolute或fixed
【4】overflow的值不为visible(默认值。内容不会被修剪,会呈如今元素框以外)
【5】display的值为inline-block、table-cell、table-caption
BFC布局规则:1.内部的Box会在垂直方向,一个接一个地放置。
2.属于同一个BFC的两个相邻的Box的margin会发生重叠
3.BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此, 文字环绕效果,设置float
4.BFC的区域不会与float box重叠。
5.计算BFC的高度,浮动元素也参与计算
BFC做用:1.自适应两栏布局
2.能够阻止元素被浮动元素覆盖
3.能够包含浮动元素---清除内部浮动 原理::触发父div的BFC属性,使下面的子div都处在父div的同一个BFC区域以内
4.分属于不一样的BFC时,能够阻止margin重叠
复制代码
事件流描述的是从页面中接受事件的顺序,能够分为:事件捕获阶段 处于目标阶段 事件冒泡阶段其中须要主要的是addeventListener这个函数 最后这个布尔值参数若是是true,表示在捕获阶段调用事件处理程序;若是是false,表示在冒泡阶段调用事件处理程序。
阻止冒泡事件event.stopPropagation() function stopBubble(e) { if (e && e.stopPropagation) { // 若是提供了事件对象event 这说明不是IE浏览器 e.stopPropagation() } else { window.event.cancelBubble = true //IE方式阻止冒泡 } } 阻止默认行为event.preventDefault() function stopDefault(e) { if (e && e.preventDefault) { e.preventDefault() } else { // IE浏览器阻止函数器默认动做的行为 window.event.returnValue = false } } 复制代码
在DOM标准事件模型中,是先捕获后冒泡。可是若是要实现先冒泡后捕获的效果,对于同一个事件,监听捕获和冒泡,分别对应相应的处理函数,监听到捕获事件,先暂缓执行,直到冒泡事件被捕获后再执行捕获事件。
鼠标事件:mouserleave mouseenter
焦点事件:blur focus
UI事件:scroll resize
复制代码
简介:事件委托指的是,不在事件的(直接dom)上设置监听函数,而是在其父元素上设置监听函数。经过事件冒泡,父元素能够监听到子元素上事件的触发经过判断事件发生元素DOM的类型,来作出不一样的响应。
new操做符建立了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象。若是不要父类的属性跟方法,在函数的prototype上去new这个父类。
this指向的固定化,并非由于箭头函数内部有绑定this的机制,实际缘由是箭头函数根本没有本身的this,致使内部的this就是外层代码块的this。正是由于它没有this,因此也就不能用做构造函数。
1.使用es6的箭头函数;2.在函数内部使用that = this;3.使用apply,call,bind; 4.new实例化一个对象
经过apply和call改变函数的this指向,他们两个函数的第一个参数都是同样的表示要改变指向的那个对象,第二个参数,apply是数组,而call则是arg1,arg2...这种形式。bind一个是返回一个函数,并不会当即执行第二个是带参数(第一个参数要指向的this,后面的的参数用来传递
基本类型 | 引用类型 |
---|---|
基本类型:undefined,null,Boolean,String,Number,Symbol在内存中占据固定大小,保存在栈内存中 | 引用类型:Object,Array,Date,Function,RegExp等 引用类型的值是对象 保存在堆内存中,栈内存存储的是对象的变量标识符以及对象在堆内存中的存储地址。 |
基本类型的复制:其实就是建立了一个新的副本给将这个值赋值给新变量, 改变值旧对象不会改变 | 引用类型的复制:其实就是复制了指针,这个最终都将指向同一个对象,改变其值新对象也会改变 |
注意:基本类型的比较 == 会进行类型转换
浅拷贝 | 深拷贝 |
---|---|
仅仅就是复制了引用,彼此操做不影响,slice() concat() object.assign | 在堆中从新分配内存,不一样的地址,相同的值,互不影响的 JSON.parse()将一个js对象序列化为一个json字符串JSON.stringify()将json字符串反序列化为一个js对象 es6的展开 {...} |
从新在堆栈中建立内存,拷贝先后对象的基本类型互不影响。只拷贝一层,不能对对象进行子对象进行拷贝 | 对对象中的子对象进行递归拷贝,拷贝先后两个对象互不影响 |
由于js是单线程的。浏览器遇到etTimeout和setInterval会先执行完当前的代码块,在此以前会把定时器推入浏览器的待执行时间队列里面,等到浏览器执行完当前代码以后会看下事件队列里有没有任务,有的话才执行定时器里的代码
同源策略(协议+端口号+域名要相同)
步骤:1.去建立一个script标签
2.script的src属性设置接口地址
3.接口参数,必需要带一个自定义函数名,要否则后台没法返回数据
4.经过定义函数名去接受返回的数据
复制代码
iframe元素建立包含另一个文档的内联框架(行内框架)(setTimeout进行异步加载) 解释:浏览器中的浏览器!用于设置文本或者图形的浮动图文框或容器 它和跨域 一、document.domain 实现主域名相同,子域名不一样的网页通讯 都设置为超域:document.domain = 'demo.com' 二、window.postMessageht(data, url),h5的API,启动跨域通讯 复制代码
提早加载图片,当用户须要查看是能够直接从本地缓存中渲染
为何要使用预加载:在网页加载以前,对一些主要内容进行加载,以提供用户更好的体验,减小等待时间。不然,若是一个页面的内容过于庞大,会出现留白。
解决页面留白的方案: 1.预加载
2.使用svg站位图片,将一些结构快速搭建起来,等待请求的数据来了以后,替换当前的占位符
实现预加载的方法:
1.使用html标签
2.使用Image对象
3.使用XMLHTTPRequest对像,但会精细控制预加载过程
复制代码
客户端优化,减小请求数和延迟请求数,提高用户体验,减小无效资源的加载,防止并发加载的资源过多会阻塞js的加载,影响网站的正常使用
原理:首先将页面上的图片的src属性设置为空字符串,而图片的真是路经则设置带data-original属性中,当页面滚动的时候须要去监听scroll事件,在scroll事件的回调中,判断咱们的懒加载的图片是否进入到可视区域,若是图片在可视区域将图片的src属性设置为data-original的值,这样就能够实现延迟加载。
防抖 | 节流 |
---|---|
短期内屡次触发同一个事件,只执行最后一次,或者在开始时执行,中间不执行。好比公交车上车,要等待最后一个乘客上车 | 节流是连续触发事件的过程当中以必定时间间隔执行函数。节流会稀释你的执行频率,好比每间隔1秒钟,只会执行一次函数,不管这1秒钟内触发了多少次事件 |
都为解决高频事件而来, scroll mousewhell mousemover touchmove onresize,后面有相应的代码实现函数的节流和防抖。
1.JS具备自动垃圾收集的机制
2.JS的内存生命周期(变量的生命)
1.分配你所须要的空间 var a = 20
2.使用分配带的内存(读写) alert(a + 10)
3.不适用的时候,释放内存空间 a = null
3.JS的垃圾收集器每隔固定的时间就执行一次释放操做,通用的是经过标记清除的算法
4.在局部做用域中,垃圾回收器很容易作出判断并回收,全局比较难,所以应避免全局变量
标记清除算法:js最多见的垃圾回收方式,当变量进入执行环境的时候,好比函数中声明一个变量,垃圾回收器将他标记为'进入环境',
当变量离开(函数执行完后),就其标记为'离开环境'。垃圾回收器会在运行的时候给存储在内存中的全部变量加上标记,
而后去掉环境中的变量以及被环境中该变量所引用的变量(闭包)。在这些完成以后仍存在标记的就是要删除的变量了
复制代码
千万不要使用typeof来判断对象和数组,由于这种类型都会返回object。
1.slice(start,end):方法能够从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组方法
注意:该方法不会更新原数组,而是返回一个子数组
2.splice():该方法想或者从数组中添加或删除项目,返回被删除的项目。(该方法会改变原数组)
splice(index, howmany,item1,...itemx)
·index参数:必须,整数规定添加或删除的位置,使用负数,从数组尾部规定位置
·howmany参数:必须,要删除的数量,
·item1..itemx:可选,向数组添加新项目
3.map():会返回一个全新的数组。使用于改变数据值的时候。会分配内存存储空间数组并返回,forEach()不会返回数据
4.forEach(): 不会返回任何有价值的东西,而且不打算改变数据,单纯的只是想用数据作一些事情,他容许callback更改原始数组的元素
5.reduce(): 方法接收一个函数做为累加器,数组中的每个值(从左到右)开始缩减,最终计算一个值,不会改变原数组的值
6.filter(): 方法建立一个新数组,新数组中的元素是经过检查指定数组中符合条件的全部元素。它里面经过function去作处理
复制代码
js阻塞 | css阻塞 |
---|---|
全部浏览器在下载JS的时候,会阻止一切其余活动,好比其余资源的下载,内容的呈现等等。直到JS下载、解析、执行完毕后才开始继续并行下载其余资源并呈现内容。为了提升用户体验,新一代浏览器都支持并行下载JS,可是JS下载仍然会阻塞其它资源的下载(例如.图片,css文件等)。 | 由于浏览器会维持html中css和js的顺序,样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载,因此就会出现上面CSS阻塞下载的状况。 |
(es6)中class, extends
function A(....){} A.prototype...
function B(....){} B.prototype...
A.prototype = Object.create(B.prototype) 再A的构造函数里new B(props)
使用new一个函数的话,函数里的构造函数的参数就为undefined,里面的一些函数可能执行错误,由于this改变了
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
复制代码
1.闭包的缺点就是常驻内存会增大内存使用量,而且使用不当容易形成内存泄漏
2.若是不是由于某些特殊任务而须要闭包,在没有必要的状况下,在其它函数中建立函数是不明智的,由于闭包对脚本性能具备负面影响,包括处理速度和内存消耗。
复制代码
内存溢出和内存泄漏(给的不够用| 用了不归还)
做用域:(由当前环境与上层环境一系列的变量对象组成!!!保证当先执行环境里,有权访问的变量和函数是有序的,做用域链变量只能被向上访问)
定义:由当前环境与上层环境的一系列变量对象组成(函数嵌套函数,内部一级级往上有序访问变量或对象)
做用是:保证当前执行环境里,有权访问的变量和函数时有序的,做用域链的变量只能被向上访问 变量访问到window对象及被终止,做用域链向下访问是不容许的 1.改变做用域有 with try..中的catch, 2.全部为定义的直接赋值的变量自动声明为全局做用域
做用域:一套规则,管理引擎如何在当前做用域以及嵌套的子做用域中根据标识符名称
查找变量(标识符就是变量或者函数名)(只用全局做用域和局部做用域)(做用域在它建立的时候就存在了)
代码执行分为两个阶段:
1.代码编译阶段:有编译器完成,将代码翻译可执行的代码,这个阶段会被肯定
2.代码执行阶段:有js引擎完成,主要执行可执行的大妈,这个阶段执行上下文被建立(对象被建立)
执行上下文:一个看不见得对象,存在若干个属性和变量,它被调用的时候建立的。函数被调用查看的this指向的object,object就是上下文(只有被调用的时候建立)
复制代码
· 当代码在一个环境中执行时,会建立变量对象的一个做用域链,
举例子:var name ="Tom"
function sayHi () {
alert('Hi,'+name)
}
sayHi() //Hi, Tom
函数sayHi()的执行环境为全局环境,因此它的变量对象为window。当函数执行到name时,先查找局部环境,找到则换回,不然顺着做用域查找,在全局环境中,
找到name返回,这一查找变量的有序过程的依据就是做用域。
· 做用域链是保证执行环境有权访问的全部变量和函数的有序访问
复制代码
原型链:函数的原型链对象constructor默认指向函数自己,原型对象除了有原型属性外,为了实现继承,还有一个原型链指针_proto_,该指针是指向上一层的原型对象,而上一层的原型对象的结构依然相似。所以能够利用_proto_一直指向Object的原型对象上,而Object原型对象用Object.prototype.proto=null表示原型链顶端。如此造成了js的原型链继承。同时全部的js对象都有Object的基本防范
2XX(成功处理了请求状态)
200 服务器已经成功处理请求,并提供了请求的网页
201 用户新建或修改数据成功
202 一个请求已经进入后台
204 用户删除成功
3XX(每次请求使用的重定向不要超过5次)
304 网页上次请求没有更新,节省带宽和开销
4XX(表示请求可能出错,妨碍了服务器的处理)
400 服务器不理解请求的语法
401 用户没有权限(用户名,密码输入错误)
403 用户获得受权(401相反),可是访问被禁止
404 服务器找不到请求的网页,
5XX(表示服务器在处理请求的时候发生内部错误)
500 服务器遇到错误,没法完成请求
503 服务器目前没法使用(超载或停机维护)
复制代码
last-modified: 客服端请求资源,同时有一个last-modified的属性标记此文件在服务器最后修改的时间,客服端第二次请求此url时,根据http协议。浏览器会向服务器发送一个If-Modified-Since报头,询问该事件以后文件是否被修改,没修改返回304
有了Last-Modified,为何还要用ETag?
一、由于若是在一秒钟以内对一个文件进行两次更改,Last-Modified就会不正确(Last—Modified不能识别秒单位的修改)
二、某些服务器不能精确的获得文件的最后修改时间
三、一些文件也行会周期新的更改,可是他的内容并不改变(仅仅改变修改的事件),这个时候咱们并不但愿客户端认为文件被修改,而从新Get
ETag,为何还要用Last-Modified?
一、二者互补,ETag的判断的缺陷,好比一些图片等静态文件的修改
二、若是每次扫描内容都生成ETag比较,显然要比直接比较修改时间慢的多。
ETag是被请求变量的实体值(文件的索引节,大小和最后修改的时间的Hash值)
一、ETag的值服务器端对文件的索引节,大小和最后的修改的事件进行Hash后获得的。
复制代码
1.超文本的传输协议,是用于从万维网服务器超文本传输到本地资源的传输协议
2.基于TCP/IP通讯协议来传递数据(HTML,图片资源)
3.基于运用层的面向对象的协议,因为其简洁、快速的方法、适用于分布式超媒体信息系统
4.http请求信息request:
请求行(request line)、请求头部(header),空行和请求数据四部分构成
请求行,用来讲明请求类型,要访问的资源以及所使用的HTTP版本.
请求头部,用来讲明服务器要使用的附加信息
空行,请求头部后面的空行是必须的
请求数据也叫主体,能够添加任意的其余数据。
5.http相应信息Response
状态行、消息报头、空行和响应正文
状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成
消息报头,用来讲明客户端要使用的一些附加信息
空行,消息报头后面的空行是必须的
响应正文,服务器返回给客户端的文本信息。
复制代码
http | https |
---|---|
是以安全为目标的HTTP通道,简单讲是HTTP的安全版本,经过SSL加密 | 超文本传输协议。是一个客服端和服务器端请求和应答的标准(tcp),使浏览器更加高效,使网络传输减小 |
1.0跟1.1的区别:
长链接:HTTP1.0须要使用keep-alive参数来告知服务器创建一个长链接,而HTP1.1默认支持长链接
节约宽带:HTTP1.1支持只发送一个header信息(不带任何body信息)
host域(设置虚拟站点,也就是说,webserver上的多个虚拟站点能够共享同一个ip端口):HTTP1.0没有host域
1.1跟2.0的区别:
1.web缓存就是存在于客户端与服务器之间的一个副本、当你第一个发出请求后,缓存根据请求保存输出内容的副本
2.缓存的好处
(1)减小没必要要的请求
(2)下降服务器的压力,减小服务器的消耗
(3)下降网络延迟,加快页面打开速度(直接读取浏览器的数)
复制代码
1.尽量的避开互联网有可能影响数据传输速度和稳定性的瓶颈和环节。使内容传输的更快更稳定。
2.关键技术:内容存储和分发技术中
3.基本原理:普遍采用各类缓存服务器,将这些缓存服务器分布到用户访问相对的地区或者网络中。当用户访问网络时利用全局负载技术
将用户的访问指向距离最近的缓存服务器,由缓存服务器直接相应用户的请求(全局负载技术)
复制代码
1.查询NDS(域名解析),获取域名对应的IP地址 查询浏览器缓存
2.浏览器与服务器创建tcp连接(三次握手)
3.浏览器向服务器发送http请求(请求和传输数据)
4.服务器接受到这个请求后,根据路经参数,通过后端的一些处理生成html代码返回给浏览器
5.浏览器拿到完整的html页面代码开始解析和渲染,若是遇到外部的css或者js,图片同样的步骤
6.浏览器根据拿到的资源对页面进行渲染,把一个完整的页面呈现出来
复制代码
客服端发c起请求链接服务器端s确认,服务器端也发起链接确认客服端确认。
流程:解析html以及构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树
概念:1.构建DOM树: 渲染引擎解析HTML文档,首先将标签转换成DOM树中的DOM node(包括js生成的标签)生成内容树
2.构建渲染树: 解析对应的css样式文件信息(包括js生成的样式和外部的css)
3.布局渲染树:从根节点递归调用,计算每个元素的大小,位置等。给出每一个节点所在的屏幕的精准位置
4.绘制渲染树:遍历渲染树,使用UI后端层来绘制每个节点
重绘:当盒子的位置、大小以及其余属性,例如颜色、字体大小等到肯定下来以后,浏览器便把这些颜色都按照各自的特性绘制一遍,将内容呈如今页面上
触发重绘的条件:改变元素外观属性。如:color,background-color等
重绘是指一个元素外观的改变所触发的浏览器行为,浏览器会根据元素的新属性从新绘制,使元素呈现新的外观
注意:table及其内部元素须要屡次计算才能肯定好其在渲染树中节点的属性值,比同等元素要多发时间,要尽可能避免使用table布局
重排(重构/回流/reflow): 当渲染书中的一部分(或所有)由于元素的规模尺寸,布局,隐藏等改变而须要从新构建,这就是回流。
每一个页面都须要一次回流,就是页面第一次渲染的时候
重排必定会影响重绘,可是重绘不必定会影响重排
复制代码
一、cookie,sessionStorage,localStorage是存放在客户端,session对象数据是存放在服务器上 实际上浏览器和服务器之间仅需传递session id便可,服务器根据session-id找到对应的用户session对象 session存储数据更安全一些,通常存放用户信息,浏览器只适合存储通常的数据 二、cookie数据始终在同源的http请求中携带,在浏览器和服务器来回传递,里面存放着session-id sessionStorage,localStorage仅在本地保存 三、大小限制区别,cookie数据不超过4kb,localStorage在谷歌浏览中2.6MB 四、数据有效期不一样,cookie在设置的(服务器设置)有效期内有效,无论窗口和浏览器关闭 sessionStorage仅在当前浏览器窗口关闭前有效,关闭即销毁(临时存储) localStorage始终有效 复制代码
1.sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在用一个会话的页面中才能被访问(也就是说在第一次通讯过程当中)
而且在会话结束后数据也随之销毁,不是一个持久的本地存储,会话级别的储存
2.localStorage用于持久化的本地存储,除非主动删除数据,不然不会过时
复制代码
一、token就是令牌,好比你受权(登陆)一个程序时,他就是个依据,判断你是否已经受权该软件(最好的身份认证,安全性好,且是惟一的)用户身份的验证方式
二、cookie是写在客户端一个txt文件,里面包括登陆信息之类的,这样你下次在登陆某个网站,就会自动调用cookie自动登陆用户名服务器生成,发送到浏览器、浏览器保存,下次请求再次发送给服务器(存放着登陆信息)
三、session是一类用来客户端和服务器之间保存状态的解决方案,会话完成被销毁(表明的就是服务器和客户端的一次会话过程)cookie中存放着sessionID,请求会发送这个id。sesion由于request对象而产生。
一、用户经过用户名和密码发送请求
二、服务器端验证
三、服务器端返回一个带签名的token,给客户端
四、客户端储存token,而且每次用于发送请求
五、服务器验证token而且返回数据
每一次请求都须要token
cookie与session区别
一、cookie数据存放在客户的浏览器上,session数据放在服务器上。
二、cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
三、session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
四、单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。
复制代码
一、数量和长度的限制。每一个特定的域名下最多生成20个cookie(chorme和safari没有限制)
二、安全性问题。
复制代码
因为篇幅过长,我准备了一个txt文档,里面有更多的前端基础知识。包括这里不曾谈及的Vue,React,node,数据结构等。奉上个人文档地址前端面试武林秘籍,学习老是须要不断的积累和总结的。写此文的目的也很明确,若总结的很差地方欢迎指出并在下方评论,或者你认为很好的知识点,没有概括到,也但愿可以分享出来,帮助你们,也提升本身。