HTTP协议定义的缓存机制(如:Expire;Cache-control等)html
浏览器无缓存场景图浏览器
浏览器有缓存场景图缓存
缓存校验过时机制服务器
(1)第一步:客户端缓存校验app
第一步:本地客户端经过Expires、Cache-Control(max-age)字段校验本地缓存是否过时3d
Expires出如今Http1.0版本;Cache-Control(max-age)出如今Http1.1版本;code
(2)第二步:Etag缓存校验server
第二步:经过Etag头信息校验服务器缓存是否过时,若是不过时,不走第三步,不然执行下一步htm
Etag解释:blog
(3)第三步:Last-Modified缓存校验
第三步:经过Last-Modified头信息校验服务器缓存是否过时,若是不过时,直接返回,不然请求服务端。
Last-Modified解释:
Last-Modified的值是具体时间:年-月-日 时:分:秒
Last-Modified用来跟服务端的缓存文件进行校验,若是服务端缓存文件在新的时间有新的更新,客户端请求的时间就会跟服务端缓存文件时间对比,这个时候就会出现客户端请求的时间跟服务端请求的时间不一致。 这样的话,服务端就会把最新的文件返回给客户端,这个利用的就是请求头中的Last-Modified头信息进行校验的。
浏览器请求到服务端缓存原理图
304状态码:客户端已经执行了GET,但文件未变化。
Nginx在响应头中添加:Cache-Control、Expires头
expires过时时间语法
Syntax:
Default:expires off;
Context: http, server, location, if in location
(1)配置location
location ~ .*\.(htm|html)$ { root /opt/app/code; }
(2)建立新的html文件
在/opt/app/html目录下建立index.html文件并编写内容
<h1>hello zhangbiao </h1>
访问
http://www.zhangbiao.com/index.html
第一次请求
连续请求 响应状态码 304
客户端请求头携带这两个字段,目的是跟服务端本地缓存文件对比
Nginx配置location
location ~ .*\.(htm|html)$ { expires 24h; root /opt/app/code; }
第一次请求:查看请求头和响应头信息
响应头多了两个字段:
第二次请求:查看请求头和响应头信息
响应头中Cache-Control字段在第一次和第二次的值都同样
无论Nginx是否配置expires过时时间,第二次请求都会携带这两个字段