1、概念理解
1、什么是缓存
缓存,原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但比较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
2、什么是web缓存
web缓存是指一个web资源(如html页面、图片、js、数据等)存在于web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求,比较常见的就是浏览器会缓存访问过的网站网页,当再次访问这个URL地址的时候,如果网页没有更新,就不再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页
3、web缓存的种类
客户端缓存
浏览器缓存
服务端缓存
Nginx / Redis /Memcached 等
4、浏览器缓存
是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览
5、为什么要用浏览器缓存
成本最低的一种缓存实现
减少网络宽带消耗
降低服务器压力
减少网络延迟,加快页面打开速度
2、浏览器缓存的执行流程
HTTP协议中和页面缓存相关的字段,我们先来认识下:
header 说明
Expires 缓存过期的日期和时间
Cache-Control 设置和缓存相关的配置信息
Last-Modified 请求资源最后修改时间
ETag 请求变量的实体标签的当前值,比如文件的MD5值
如果缓存没有过期,直接从缓存中获取数据,展示给用户,这是强缓存
如果缓存过期,向服务器 发送请求 判断Etag 和 last-Modified都没变时,再次获取缓存,展示给用户,就是弱缓存

强缓存和弱缓存演示
第一次访问

响应头信息中有 ETag 和 Last-Modified

请求头信息

刷新再次访问 —————— 弱缓存

请求头信息
请求头信息 中多了 if-Modeified-Since 和 if-None-Match 分别发送的是 ETag 和 Last-Modified的值,让服务器判断对应的资源是否有发生变化,如果没有变化,那么直接返回304,取缓存

新 + 一个浏览器网页,复制粘贴网址 --------强缓存
结果如下 ,200是灰色的,也是缓存数据

3、浏览器缓存相关指令
Nginx需要进行缓存相关设置,就需要用到如下指令
3.1 expires 指令
expires : 该指令用来控制页面缓存的作用。可以通过该指令控制HTTP应答中的 ‘Expirs’ 和 ‘Cache-Control’
语法 expires [modified] time
expires epoch | max | off;
默认值 expires off;
位置 http 、server、location
time: 可以整数 也可以是负数,指定过期时间,如果是负数Cache-Control则为no-cache,如果为no-cache时,不管有没有缓存此时都需要向服务器发送确认文件是否有发生变化,如果没有变化则走的是弱缓存,如果有变化那么就继续向服务器发送请求获取结果
如果为整数或0,则Cache-Control的值为max-age=time,time值为你指定的time值,max-age 的作用和Expires的作用是一样的。
epoch: 指定Expire的值为 '1 january,1970,00:00:01 GMT `(1970-01-01 00:00:00) Cache-Control的值为 no-cache
max: 指定Expires的值为 ‘31 December 2037 23:59:59GMT’ (2037-12-31 23:59:59), Cache-Control的值为10念
off: 默认不缓存
配置之前的响应头

配置缓存1000s

配置之后的响应头

3.2 add_header 指令
add_header 指令是用来添加指定的响应头和响应值。
语法 add_header name value[always]
默认值 -
位置 http、server、location
Cache-Control 作为响应头信息,可以设置如下值:
缓存响应指令
cache-control: must-revalidate
cache-control: no-cache
cache-control: no-store
cache-control: no-transform
cache-control: public
cache-control: private
cache-control: proxy-revalidate
cache-control: max-age=<seconds>
cache-control: s-maxage=<seconds>
指令 说明
must-revalidate 可缓存但必须再向源服务器进行确认
no-cache 缓存前必须确认其有效性
no-store 不缓存请求或响应的任何内容
no-transform 代理不可更改媒体类型
public 可向任意方提供响应的缓存
private 仅向特定有户返回响应
proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
max-age=<秒> 响应最大Age值
s-maxage=<秒> 公共缓存服务器响应的最大Age值
示例配置如下:

加上add_header 后,每次访问不走缓存

1046

被折叠的 条评论
为什么被折叠?



