共计 2752 个字符,预计需要花费 7 分钟才能阅读完成。
cookie 与 session 有什么区别?
因为 HTTP 协定是无状态的协定,所以服务端须要记录用户的状态时,就须要用某种机制来识具体的用户,这个机制就是 Session. 典型的场景比方购物车,当你点击下单按钮时,因为 HTTP 协定无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创立了特定的 Session,用用于标识这个用户,并且跟踪用户,这样才晓得购物车外面有几本书。这个 Session 是保留在服务端的,有一个惟一标识。在服务端保留 Session 的办法很多,内存、数据库、文件都有。集群的时候也要思考 Session 的转移,在大型的网站,个别会有专门的 Session 服务器集群,用来保留用户会话,这个时候 Session 信息都是放在内存的,应用一些缓存服务比方 Memcached 之类的来放 Session。
思考一下服务端如何辨认特定的客户?这个时候 Cookie 就退场了。每次 HTTP 申请的时候,客户端都会发送相应的 Cookie 信息到服务端。实际上大多数的利用都是用 Cookie 来实现 Session 跟踪的,第一次创立 Session 的时候,服务端会在 HTTP 协定中通知客户端,须要在 Cookie 外面记录一个 Session ID,当前每次申请把这个会话 ID 发送到服务器,我就晓得你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?个别这种状况下,会应用一种叫做 URL 重写的技术来进行会话跟踪,即每次 HTTP 交互,URL 前面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来辨认用户。
Cookie 其实还能够用在一些不便用户的场景下,构想你某次登陆过一个网站,下次登录的时候不想再次输出账号了,怎么办?这个信息能够写到 Cookie 外面,拜访网站的时候,网站页面的脚本能够读取这个信息,就主动帮你把用户名给填了,可能不便一下用户。这也是 Cookie 名称的由来,给用户的一点苦头。所以,总结一下:Session 是在服务端保留的一个数据结构,用来跟踪用户的状态,这个数据能够保留在集群、数据库、文件中;Cookie 是客户端保留用户信息的一种机制,用来记录用户的一些信息,也是实现 Session 的一种形式。
什么是 session?
服务器通过 cookie 给用户一个 sessionID,
sessionID 对应服务器里的一小块内存,
每次用户拜访服务器的时候,服务器就通过 sessionID 去读取对应的 session,来晓得用户的隐衷信息
面试的时候怎么答复 cookie 和 session 的特点:
localStorage 是什么?
是 html5 技术提供的一个 API,
session 是服务器上的哈希表
localStorage 的本质就是一个哈希表,是浏览器上的哈希表
localStorage.setItem ()
承受两个参数,能够存一个 key、value,只能以字符串的模式存
如果要存一个对象,能够用 JSON.stringify 进行转化
localStorage.getItem ()
能够获取值,只承受一个 name
localStorage.clear ()
不承受参数,清空 key、value
都是用来操作以后页面外面的哈希表
localStorage 不存在与页面里,它存在 C 盘的一个文件里
session 的毛病就是占内存
利用:
场景:页面更新,提醒用户,然而只揭示一次,用户二次进入(刷新)的时候不须要提醒
localStroage 与 sessionStroage 的区别
sessionStroage 与 session 没有关系
session 与 Cookie 什么关系
一般来说 session 是基于 Cookie 实现的,反过来说 cookie 是 session 的基石
认为 session 必须把 sessionID 放进 cookie 里再发送给客户端
session 大部分工夫是基于 Cookie 来存储 ID 的,然而它也能够通过查问参数和 localStroage 来存储它的 ID
localStroage 与 Cookie 的区别
cookie 每次会带给服务器,localStroage 不会带给服务器,它与 HTTP 无关
cookie 最大 4k,loaclStroage5MB 左右
理解 Cache-Control
HTTP 缓存,web 优化(常识)
将某文件缓存至本地
response.setHeather (‘Cache-Control’,'max-age=30')
将文件在本地保留 30s,刷新不会申请,30s 后刷新从新申请,个别 max-age
要设置久一点例如十年!300000000(阔怕!)
然而,浏览器感觉你存那么久也没啥用,个别一年当前就帮你清了
你问有什么结果吗?
没有!反正也没 bug,也就是加载可能慢一点点而已
首页不会应用应用 cache-contorl
如果要降级 css 或 js 就在前面加上一个查问参数
如 https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
更新后:https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js?v=2
这样的话 max-age=30'
就会生效
- Expires 和 Cache-Control 有什么区别
Expires 设置的是工夫点
Cache-Control 设置的是工夫长度
如果同时设置无限应用 Cache-Control
Cache-Control 是降级后才有的,10 几年前都是用 Expires 管制缓存
Expires: Wed, 21 Oct 2015 07:28:00 GMT
因为他用的本地工夫,如果工夫错乱了,那你就完了
理解 MD5(讯息摘要算法)
一种被宽泛应用的明码杂凑函数,能够产生出一个 128 位元的散列值(hash value),用于确保信息传输残缺统一
举个栗子:
如果你在网上下载了一个软件,有 300M,然而你不晓得你下载的是不是和它的 300M 一样
这时就须要有个 MD5,如果你们两个的 MD5 值一样,那么阐明你下载的 300M=== 它的 300M
文件差别越小,MD5 的差别越大
理解 ETag
用 cache-Control 是不申请,ETage 是间接不下载,但还是有申请,然而响应体是空的
关上一个网页,首次关上会有一个 ETag,
当前再关上它的时候申请里有一个 if-none-match 响应头,前面跟的就是 MD5
源码附件曾经打包好上传到百度云了,大家自行下载即可~
链接: https://pan.baidu.com/s/14G-b…
提取码: yu27
百度云链接不稳固,随时可能会生效,大家放松保留哈。
如果百度云链接生效了的话,请留言通知我,我看到后会及时更新~
开源地址
码云地址:
http://github.crmeb.net/u/defu
Github 地址:
http://github.crmeb.net/u/defu