Cookie是什么
“cookie是为了辨别用户身份而储存在用户本地终端(Client Side)上的数据”——wiki
通俗的理解cookie是一张长期门票,用户持有该门票进入网站便可不必重复验证用户信息
Cookie有哪些特点
- 初次登陆时,服务器通过
response.setHeader('set-Cookie',`email=${email}`)
设置cookie - 浏览器得到cookie后,每次请求都会带上cookie
- 服务器读取cookie以得到用户的信息
- cookie存在本地文件中
- cookie可以被用户手动更改,所以并不安全
- cookie有效期可以被后端强制设置
- 后端如何读取cookie:
request.headers.cookie
set-Cookie有哪些值
set-Cookie-
非完整正规流程展示
742759705.jpg
session
session是基于cookie实现的。在服务器有一块内存中存有sessionId和相应的用户信息。服务器通过set-Cookie不直接将用户信息发送浏览器而将sessionid发给浏览器。当浏览器再次访问服务器时,服务器通过sessionid来找到相应用户信息。
localStorage
localStorage是新出的一个API
它存储相应的信息,作持久化存储,有什么用?
我希望某些东西在页面中只出现一次,比如一些弹窗,怎么记录这个弹窗已经弹出过?就用localStorage
怎么用?
localStorage.setItem('cat','yyh')
localStorage.getItem('cat')//yyh
localStorage.removeItem('cat')
localStorage.clear()
其特点是:
- 它与HTTP没有任何关系,HTTP不会带上localStorage的值,一般只由前端控制
- 仅有相同域名的页面才能相互读取localStorage的值(没有同源策略那么严格)
3.每个域名最大存储 5MB左右 - 理论上长期有效,除非用户清楚缓存
cache-control
cache-control是一个响应头
怎么设置:response.setHeader('cache-control','max-age=1000000')
以秒为单位
在设置了这个响应头后,浏览器访问同一个url,就不会在发起请求,转而读取本地缓存。
因而只要改变url就不会使用缓存,例如给url加一些参数,当版本升级时就可以做到不读取缓存
expires
expires也是一个响应头,与cache-control作用一致
区别是,expires的过期时间是确定的某个时间而不是一段时间
response.setHeader('expires','Wed, 21 Oct 2015 07:28:00 GMT')
ETag
ETag是一个响应头
当浏览器向服务器请求某个资源时,服务器通过MD5算法,计算一个值,并将该值通过ETag返回给浏览器,当浏览器再次请求这个资源,通过请求头(if-none-match
)带上这个值,服务器会将这个值与本地的值对比,如果一样,返回状态码304
304
:not modified 响应没有响应体只有响应头,服务器没法下载响应体只能从本地缓存中读取这个资源
对比cache-control,依旧是cache-control更好,因为etag会发请求,cache-control连请求都不发,速度更快
网友评论