http缓存

一、3种强缓存

描述: 不需要发送请求到服务端,直接读取浏览器本地缓存

1. Expires(最低优先级)

Expires 的值是一个 HTTP 日期,WEB服务器使用Expires头来告诉Web客户端,会根据系统时间和 Expires 的值进行比较,如果系统时间超过了 Expires 的值,缓存失效。由于和系统时间进行比较,所以当系统时间和服务器时间不一致的时候,会有缓存有效期不准的问题。

Expires 的优先级在三个 Header 属性中是最低的。

2. Cache-Control(中)

max-age:单位是秒,缓存时间计算的方式是距离发起的时间的秒数,超过间隔的秒数缓存失效

no-cache:不使用强缓存,需要与服务器验证缓存是否新鲜

no-store:禁止使用缓存(包括协商缓存),每次都向服务器请求最新的资源

private:专用于个人的缓存,中间代理、CDN 等不能缓存此响应

public:响应可以被中间代理、CDN 等缓存

must-revalidate:在缓存过期前可以使用,过期后必须向服务器验证

3. Pragma(最高)

Pragma 只有一个属性值,就是 no-cache ,效果和 Cache-Control 中的 no-cache 一致

二、协商缓存

当浏览器的强缓存无效,并且在请求头中设置If-Modified-Since 或者 If-None-Match 的时候,会将这两个属性值到服务端去验证是否命中协商缓存,如果命中了协商缓存,会返回 304 状态,加载浏览器缓存,并且响应头会设置 Last-Modified 或者 ETag 属性。

1. ETag(返回头) If-None-Match(请求头设置)

ETag/If-None-Match 的值是一串 hash 码,代表的是一个资源的标识符,当服务端的文件变化的时候,它的 hash码会随之改变,通过请求头中的 If-None-Match 和当前文件的 hash 值进行比较,如果相等则表示命中协商缓存。ETag 又有强弱校验之分,如果 hash 码是以 “W/“ 开头的一串字符串,说明此时协商缓存的校验是弱校验的,只有服务器上的文件差异(根据 ETag 计算方式来决定)达到能够触发 hash 值后缀变化的时候,才会真正地请求资源,否则返回 304 并加载浏览器缓存。

2. Last-Modified(返回头) If-Modified-Since(请求头设置)

Last-Modified/If-Modified-Since 的值代表的是文件的最后修改时间,第一次请求服务端会把资源的最后修改时间放到 Last-Modified 响应头中,第二次发起请求的时候,请求头会带上上一次响应头中的 Last-Modified 的时间,并放到 If-Modified-Since 请求头属性中,服务端根据文件最后一次修改时间和 If-Modified-Since 的值进行比较,如果相等,返回 304 ,并加载浏览器缓存。


转载请注明: Ding Zuke's blog http缓存

上一篇
回流 重绘 回流 重绘
一、概念 dom-tree: 浏览器把获取到的HTML代码解析成1个DOM树,DOM树里包含了所有HTML标签,包括display:none隐藏,还有用JS动态添加的元素等。 样式结构体: 浏览器把所有样式(用户定义的CSS和用户代理)解
2020-07-22 丁祖科
下一篇
柯里化-偏函数-反柯里化 柯里化-偏函数-反柯里化
1. 柯里化 描述:柯里化算是特殊的偏函数,把一个多参数函数转换成多个单参数函数,也就是说把一个具有n个参数的函数转换成n个一元函数 特点: 1、闭包,调用柯里化函数(currie)返回另外一个函数(_myFn),通过闭包缓存真正执行
2020-07-21 丁祖科