HTTP 缓存

作者: z_yyy | 来源:发表于2019-03-12 19:57 被阅读2次

前端开发的时候,在页面刷新后,所有数据都会被清空。如果要使数据不被清除,这个时候就需要用到其他存储方式:cookiesessionlocalStorage、``sessionStorage。

Cookie


  1. 服务器通过 Set-Cookie 头给客户端一串字符串
  2. 客户端每次访问相同域名的网页时,必须带上这段字符串
  3. 客户端要在一段时间内保存这个Cookie
  4. Cookie 默认在用户关闭页面后就失效,后台代码可以任意设置 Cookie 的过期时间
  5. 大小大概在 4kb 以内

Session


  1. 将 Session Id(随机数)通过 Cookie 发给客户端
  2. 客户端访问服务器时,服务器读取 Session Id
  3. 服务器有一块内存(哈希表)保存了所有 session
  4. 通过 Session Id 我们可以得到对应用户的隐私信息,如 id、email
  5. 这块内存(哈希表)就是服务器上的所有 session

localStorage & sessionStorage


  1. localStorage / sessionStorage 跟 HTTP 无关
  2. HTTP 不会带上 localStorage / sessionStorage 的值
  3. 只有相同域名的页面才能互相读取 localStorage / sessionStorage(没有同源那么严格)
  4. 每个域名 localStorage / sessionStorage 最大存储量为 5Mb 左右(每个浏览器不一样)
  5. localStorage 永久有效 (除非用户清除缓存)
    sessionStorage 在用户关闭页面(会话结束)后就失效

Session 和 Cookie 的关系


Cookie 保存在客户端,每次都随请求发送给 Server

Session 保存在 Server 的内存里,其 Session ID 是通过 Cookie 发送给客户端的

异同


生命周期

Cookie:后台可设置过期时间,默认在用户关闭页面后就失效

localStorage:永久有效,除非用户清除缓存

sessionStorage:在用户关闭页面(会话结束)后就失效

存放数据大小

Cookie:4KB

localStorage & sessionStorage:最大存储量为 5MB 左右

HTTP请求

Cookie:每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题

localStorage 和 sessionStorage:仅在客户端(即浏览器)中保存,不参与和服务器的通信

应用场景


Cookie:客户端记录用户信息,可在同一浏览器的不同进程间共享,比如两个chrome窗口。

Session:存储特定用户会话所需的属性及配置信息,在web页面跳转时,信息不丢失。常用场景:

  1. 存储整个会话过程中保持用户状态的信息,比如登录信息或者用户浏览时产生的其他信息
  2. 存储只需要在页面重新加载过程中,或者一组功能页之间保持状态的对象
    3.在 Web服务器上保持用户的状态信息供在任何时间从任何设备上的页面进行访问

localStorage:对数据实时同步都有较高要求的都会是这个技术的应用场景:

  1. 同源窗口通信:例如通知中心上的未读数量,在不同的窗口中,只要消息数量更新,所有窗口的消息提示数量都会更新;localStorage 也可用来管理购物车的内容。
  2. 填写表单时,自动存储表单填写内容

sessionStorage:使用 sessionStorage 进行页面传值

HTTP缓存


cache-control 被用于在http 请求和响应中通过指定指令来实现缓存机制。缓存指令是单向的, 这意味着在请求设置的指令,在响应中不一定包含相同的指令。

cache-control 可以让浏览器在一定时间内不去访问服务器,直接用本地的硬盘或者内存做出响应,若要更新只要在入口处把URL稍做变动,和以前的所有URL都不一样,浏览器就不会使用缓存,而去下载最新的文件,然后把最新的内容缓存下来。这样会让网页特别的快。

Expire 设置缓存过期时间
这个过期时间指的是本地时间,若用户本地时间错误,则所有缓存都会出错

Expirecache-control 同时设置时,优先使用 cache-control

ETag 的缓存是在 HTTP 请求中设置 ETag 的值,如果用户再次访问相同 URL 时,服务器将客户端的 ETag 和当前版本的资源的 ETag 进行比较,如果两个值匹配, 服务器返回 304 状态,告诉客户端可使用缓存

相关文章

  • HTTP缓存原理

    什么是HTTP缓存 HTTP缓存通常指浏览器缓存,基于HTTP中header字段实现HTTP缓存分为强缓存和协商缓...

  • 前端缓存

    前端缓存 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • 前端缓存详解

    一、前言 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • PWA笔记一:Web的万物基础缓存

    前言 这里讨论的缓存包括两种,一种是HTTP缓存,一种是Service Worker缓存。 HTTP缓存 HTTP...

  • 前端缓存的理解 或者 前端数据持久化的理解(强制缓存、协商缓存)

    前端缓存分为HTTP缓存和浏览器缓存 其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而...

  • http缓存和各个版本差异理解

    http缓存我们可以通过设置http头部属性来对资源进行缓存,资源缓存分为强制缓存和协商缓存 强制缓存expire...

  • http缓存

    http缓存分为强制缓存和对比缓存 强制缓存时, 客户端先判断本地缓存是否有效(http/1.1通过Cache-C...

  • HTTP缓存

    缓存控制Cache-Control Cache-Control是Web性能优化的一种,能加速HTTP请求与响应。 ...

  • http缓存

    来源: 《http权威指南》学一个东西,怎么去学习呢?这分为三个步骤,是什么, 为什么, 怎么做?文章我会着重讲怎...

  • Http缓存

    参考文章:http://oohcode.com/2015/05/28/http-cache/ 客户端 头字段: C...

网友评论

    本文标题:HTTP 缓存

    本文链接:https://www.haomeiwen.com/subject/emvnpqtx.html