美文网首页
http缓存

http缓存

作者: redpeanuts | 来源:发表于2020-05-13 11:47 被阅读0次

如何让一个资源可缓存

HTTP 1.1 风格的Cache-Control 响应头中的 max-age指令
HTTP 1.0 风格的 Expires 响应头
Last-Modified响应头

缓存的组成

freshness + validation

freshness 缓存有效期

The freshness lifetime is calculated based on several headers. If a "Cache-control: max-age=N" header is specified, then the freshness lifetime is equal to N. If this header is not present, which is very often the case, it is checked if an Expires header is present. If an Expires header exists, then its value minus the value of the Date header determines the freshness lifetime. Finally, if neither header is present, look for a Last-Modified header. If this header is present, then the cache's freshness lifetime is equal to the value of the Date header minus the value of the Last-modified header divided by 10.
缓存有效期是根据多个header信息来计算得出,如果含有"Cache-control: max-age=N"则有效期等于N,如果不存在,多数情况下是不存在~~。
检查是否存在Expires,如果存在则有效期等于Expires值减去Date的值。如果两者都不存在,则检查Last-Modified是否存在,然后利用Date减去其值再除以10即:(Date-(Last-modified))/10

  • 如何更新缓存时间设置的很长的文件

    修改文件名称
    e.g
    原始文件 gift.png 有效期1年
    中途更新 gift.1.1.png vs gift.png?v=1.1
    多数情况下两者效果是一致的,但是通过请求参数的方式会在Squid等一些代 理中缓存命中失败,
    Revving Filenames: don’t use querystring,但这篇文章是 2008年的,有时间再验证一下

缓存失效时间

The expiration time is computed as follows:

expirationTime = responseTime + freshnessLifetime - currentAge

validation缓存校验

缓存过期后,请求会通过cache server向origin server 访问请求资源

  • 强校验
    Etag + If-None-Match:服务端将资源生成Etag值,并通过response header发送给客户端。当客户端进行缓存校验时将该值通过If-None-Match携带至服务端,若该资源的Etag值不匹配则返回200并返回新的资源,如果匹配上了则返回304表示未修改,并返回空的响应体
  • 弱校验
    Last-modified + Since-last-modified: response携带 Last-modified至客户端,校验时再由 Since-last-modified将值携带至服务端,如果不匹配则返回200与新资源,如果匹配则返回304.

vary

Vary头域值指定了一些请求头域,这些请求头域用来决定: 当缓存中存在一个响应,并且该缓存没有过期失效,是否被允许去利用此响应去回复后续请求而不需要重验证(revalidation)。
第一次请求时获取相应,在缓存了该响应的同时会缓存vary中存在的头部信息例如user-agent
第二次请求时,校验该请求中user-agent是否与第一次的相同,如果相同则可以直接使用缓存,否则需要从orifgin获取

参考

MDN Cache
Cache tutorial
Cache-contral : must-revalidate

相关文章

  • 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/bebgnhtx.html