博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx 浏览器缓存
阅读量:5739 次
发布时间:2019-06-18

本文共 1475 字,大约阅读时间需要 4 分钟。

浏览器缓存原理

 HTTP协议定义的缓存机制(如:Expire;Cache-control等)

浏览器无缓存场景图

浏览器有缓存场景图

缓存校验过期机制

 

(1)第一步:客户端缓存校验

   第一步:本地客户端通过Expires、Cache-Control(max-age)字段校验本地缓存是否过期

    Expires出现在Http1.0版本;Cache-Control(max-age)出现在Http1.1版本;

(2)第二步:Etag缓存校验

   第二步:通过Etag头信息校验服务器缓存是否过期,如果不过期,不走第三步,否则执行下一步

    Etag解释:

  •     Etag的值是一串字符串,在一秒时间内更新的话,服务端是无法识别的,这个时候就需要Etag校验

(3)第三步:Last-Modified缓存校验

 

  第三步:通过Last-Modified头信息校验服务器缓存是否过期,如果不过期,直接返回,否则请求服务端。

    Last-Modified解释:

    Last-Modified的值是具体时间:年-月-日 时:分:秒

    Last-Modified用来跟服务端的缓存文件进行校验,如果服务端缓存文件在新的时间有新的更新,客户端请求的时间就会跟服务端缓存文件时间对比,这个时候就会出现客户端请求的时间跟服务端请求的时间不一致。 这样的话,服务端就会把最新的文件返回给客户端,这个利用的就是请求头中的Last-Modified头信息进行校验的。

 浏览器请求到服务端缓存原理图

 

304状态码:客户端已经执行了GET,但文件未变化。

浏览器缓存场景演示

Nginx在响应头中添加:Cache-Control、Expires头

expires过期时间语法

Syntax: 

  • expires [modified] time;
  • expires epoch | max | off; 不常用

Default:expires off;

Context: http, server, location, if in location

 

配置没有expires场景

(1)配置location

location ~ .*\.(htm|html)$ {        root  /opt/app/code;    }

  

(2)创建新的html文件

在/opt/app/html目录下创建index.html文件并编写内容

hello zhangbiao

访问

http://www.zhangbiao.com/index.html

 

第一次请求

 

连续请求 响应状态码 304 

客户端请求头携带这两个字段,目的是跟服务端本地缓存文件对比

  • If-Modified-Since:
  • If-None-Match:

Nginx配置expires场景 

Nginx配置location

location ~ .*\.(htm|html)$ {        expires 24h;        root  /opt/app/code;    }

  第一次请求:查看请求头和响应头信息

 

 

响应头多了两个字段:

  • Cache-Control:
  • Expires:

 

第二次请求:查看请求头和响应头信息

响应头中Cache-Control字段在第一次和第二次的值都一样

 

 不管Nginx是否配置expires过期时间,第二次请求都会携带这两个字段

  • If-Modified-Since:
  • If-None-Match:

 

 

转载于:https://www.cnblogs.com/crazymagic/p/11028342.html

你可能感兴趣的文章
linux启动显示grub
查看>>
解决 appt getting 'android:icon' attribute: attribu
查看>>
jquery/js PDF预览
查看>>
Jinja2 filter
查看>>
css判断不同分辨率显示不同宽度布局实现自适应宽度
查看>>
grub应用
查看>>
MFC多线程的创建,包括工作线程和用户界面线程
查看>>
.NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
查看>>
我的友情链接
查看>>
Windows Server 2016 技术预览 Hyper-V 新特性
查看>>
FreeNAS8 ISCSI target & initiator for linux/windows
查看>>
cvs文件提交冲突解决方案
查看>>
十步优化SQL Server中的数据访问
查看>>
oracle 64位PL/SQL连接报错Make sure you have the 32 b...
查看>>
java 执行jar包中主程序
查看>>
golang中省略返回值造成内存泄漏
查看>>
PostgreSQL数据库集群初始化
查看>>
ViewHolder的应用
查看>>
++重载
查看>>
Rainbond 5.0.4版本发布-做最好用的云应用操作系统
查看>>