HTTP缓存

2022-06-20  本文已影响0人  梁庄十年

1 缓存分类

a. 强缓存;
b. 协商缓存;

2 缓存作用

a. 可以加快资源获取速度,提升用户体验,减少网络传输,缓解服务端的压力;

3 缓存运作流程

缓存流程图

4 强缓存详解

a. 强缓存分为 Disk Cache(存放硬盘)和Memory Cache(存放内存),存放位置有浏览器控制,是否强缓存由Expires, Cache-Control 和Pragma 三个Header属性共同控制;
b. 不需要发送请求到服务端,直接读取浏览器本地缓存,在chrome的network中显示的HTTP状态码是200;

4.1 Expires

expires的值是一个HTTP日期,在浏览器发起请求时,会根据系统时间和Expires的值进行比较,如果系统时间超过了Expires的值, 缓存失效。由于和系统时间进行比较,所以当系统时间和服务器时间不一致的时候,会有缓存有效期不准的问题。 Expires的优先级在三个Header属性中最低。

4.2 Cache-Control

cache-control是http1.1中新增的属性,在请求头和响应头中都可以使用;常用属性如下:

4.3 Pragma

5 协商缓存详解

当浏览器的强缓存失效的时候或者请求头中设置了不走强缓存,并且在请求头中设置if-modified-since或者if-none-match的时候,会将这两个属性值到服务端去验证是否命中协商缓存,如果命中了协商缓存,会返回304,加载浏览器缓存,并且在响应头会设置last-modified或者Etag属性。

5.1 Etag/if-none-match

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

5.2 Last-Modified/If-Modified-Since

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

参考

上一篇 下一篇

猜你喜欢

热点阅读