缓存

作者: BingeryLamb | 来源:发表于2020-01-20 09:51 被阅读0次

上面是浏览器存储的缓存策略
大规模系统中希望自动缓存
浏览器端和服务器端去协商一种通用的\color{red}{自动缓存策略}
通过http header
cache-control

  • max-age
  • s-maxage
  • private(私人缓存,比如浏览器缓存的信息 只有访问这个浏览器的人才能使用)
  • public(cdn,能被很多用户访问并且读取信息)
  • no-cache
  • no-store(完全不使用缓存)

缓存设备有很多: 浏览器 浏览器和服务器之间的代理服务器(cdn)

response headers:

\color{red}{cache-control}: \color{red}{max-age=3600}[http1.1],(优先级高于expires)
\color{red}{s-maxage=325360000},(只能指定public缓存,优先级高于max-age,不是从浏览器拿而是\color{red}{cdn},过了时间再从原服务器拿)

cache-control: private,max-age=0,no-cache(搭配max-age临时用的,表示不管怎么样都会向浏览器发起请求,通过服务端比如last-modified等信息去进一步判断浏览器缓存有没有过期,从而知道缓存策略)

\color{red}{expires}: \color{red}{Wed, 24 Jan 2018 12:18:34 GMT}[http1.0],(缓存过期时间,是服务器端的具体时间点)

以上是强的浏览器端的缓存策略

  • 弊端: 服务器文件更新之后 浏览器无法感知 因为都是直接从浏览器读

如何感知服务端文件发生变化呢?

Last-Modified / If-Modified-Since(同时存在优先级低于max-age)

  • 服务端返回
    response headers:
    \color{red}{last-modified}: \color{red}{Wed, 24 Jan 2018 12:18:34 GMT}
  • 客户端每次请求带上
    request headers:
    \color{red}{if-modified-since}: Wed, 24 Jan 2018 12:18:34 GMT
  • 没有更新返回\color{red}{304}
  • 去浏览器拿缓存文件使用
  • 更新返回新的last-modified\color{red}{200}

弊端

  • \color{red}{某些服务器不能获取精确的修改时间 }
  • 文件修改\color{red}{时间改了 内容没变} 也会让缓存失效

Etag / If-None-Match

  • 服务端返回
    response headers:
    \color{red}{Etag}: \color{red}{57c958-65f} (文件内容改变 hash值变化)
  • 客户端每次请求带上
    request headers:
    \color{red}{If-None-Match}: 57c958-65f (比对 有变动返回200 没变动就304)
  • 没有更新返回\color{red}{304}
  • 去浏览器拿缓存文件使用
  • 更新返回新的Etag\color{red}{200}

分级缓存策略

0D583037-CD30-49B8-8EEC-2B82FAA3D2A4.png

相关文章

网友评论

      本文标题:缓存

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