让前端飞IT技术篇前端开发

HTTP缓存机制 & cookie/localStorage/s

2019-11-05  本文已影响0人  Smileswlin

web缓存大致可以分为:数据库数据缓存、服务器端缓存(代理服务器缓存、CDN缓存)、浏览器端缓存、web应用层缓存。

其中,浏览器端缓存的机制种类:HTTP缓存机制、浏览器本地存储(cookie 、localStorage、sessionStorage、webSQL、indexDB、……)如下图所示:

浏览器本地存储

本文主要着重讲解浏览器本地存储(cookie 、localStorage、sessionStorage) 以及 HTTP缓存机制。


浏览器本地存储

Cookie

Cookie(或者Cookies),指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)

sessionStorage 和 localStorage

Web Storage 是指 HTML5 的本地存储 API sessionStorage 和 localStorage。

Cookie VS Web Storage

Cookie & Web Storage 异同点

Cookie VS Session

Cookie VS Session 异同点

HTTP缓存机制

概述

从缓存位置上来说分为四种,优先级依次是:
Memory Cache、Service Worker Cache、Disk Cache、Push Cache


浏览器缓存

浏览器端的缓存规则

浏览器缓存的控制

分别从新鲜度和校验值两个维度来规定浏览器是否可以直接使用缓存中的副本,还是需要去源服务器获取更新的版本。


常见的与缓存有关的消息报头
if (Cache-Control === no-store) {
  // 绝对禁止缓存,浏览器本地不会进行缓存,每次请求资源都要从服务器重新获取。
 直接向服务器获取资源(本地不缓存资源)
} else if (Cache-Control === no-cache) {
  // 设置了 no-cache 之后并不代表浏览器不缓存,而是在获取缓存前要向服务器确认资源是否被更改。
 每次请求都向服务器确认资源是否被更改(本地缓存资源),走下面的协商缓存
} else if (本地未过期 => max-age || Expires) {
  使用浏览器本地缓存
} else { // 协商缓存
  if (ETag有值) {

      向服务器请求带if-None-Match

      if (ETag与原来的一致) {
        返回304,直接使用本地缓存
      } else {
        返回200,获取新资源
      }
  } else if (Last-modified有值) {

      向服务器请求带if-Modified-Since

      if (Last-modified与原来的一致) {
        返回304,直接使用本地缓存
      } else {
        返回200,获取新资源
      }
  } else {
      向服务器获取新资源,返回200
 }
}

缓存流程

以上过程也可以被概括为三个阶段:

详细信息——缓存有关的HTTP消息报头

Cache-Control
Cache-Control与Expires

Cache-Control与 Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过 Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于 Expires

public 与 private

public 与 private 是针对资源是否能够被代理服务缓存而存在的一组对立概念。如果我们为资源设置了 public,那么它既可以被浏览器缓存,也可以被代理服务器缓存;如果我们设置了 private,则该资源只能被浏览器缓存。private 为默认值。

Last-Modified与ETag

Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。

Last-Modified/ETag 与 Cache-Control/Expires
有Last-Modified为什么还要有ETag?

HTTP1.1中Etag的出现主要是为了解决几个 Last-Modified 比较难解决的问题:

用户操作行为与缓存的关系
用户操作行为与缓存的关系

参考链接:
你必须懂的前端性能优化
浏览器缓存机制全攻略
Web缓存相关知识整理
9大浏览器端缓存机制分析
深入理解浏览器的缓存机制

推荐文章:
前端开发之走进Vue.js(入门知识点)
《你不知道的javascript上卷》摘要(上)
《你不知道的javascript上卷》摘要(下)
Git使用总结
如何在Vue+Webpack下配置Stylelint
Highchart属性笔记

原文:HTTP缓存机制 & cookie/localStorage/sessionStorage

上一篇下一篇

猜你喜欢

热点阅读