Cookie与缓存控制

Cookie是什么

“cookie是为了辨别用户身份而储存在用户本地终端(Client Side)上的数据”——wiki
通俗的理解cookie是一张长期门票,用户持有该门票进入网站便可不必重复验证用户信息

Cookie有哪些特点

  1. 初次登陆时,服务器通过response.setHeader('set-Cookie',`email=${email}`)
    设置cookie
  2. 浏览器得到cookie后,每次请求都会带上cookie
  3. 服务器读取cookie以得到用户的信息
  4. cookie存在本地文件中
  5. cookie可以被用户手动更改,所以并不安全
  6. 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()

其特点是:

  1. 它与HTTP没有任何关系,HTTP不会带上localStorage的值,一般只由前端控制
  2. 仅有相同域名的页面才能相互读取localStorage的值(没有同源策略那么严格)
    3.每个域名最大存储 5MB左右
  3. 理论上长期有效,除非用户清楚缓存

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连请求都不发,速度更快

你可能感兴趣的:(Cookie与缓存控制)