Nginx作为静态资源web服务之缓存原理


大致理一下http浏览器缓存原理:
浏览器第一次请求服务器,此时浏览器肯定没有缓存,则直接调用服务器端,服务器在返回的信息的信息头中添加 ETag和Last-Modified参数信息,返回给客户端浏览器缓存。
然后浏览器以后的请求,先判断是否有缓存,那么怎么判断有缓存呢,有三步:
(1)是否过期  
(2)对ETag信息对比 ,ETag:  就是一个生成的字符串
(3)对Last-Modified信息对比;Last-Modified:服务端最后一次修改的时间。
如果没有过期,则将信息直接返回回去,如果过期了,则将请求发送到服务端,此时request的头信息中带着ETag和Last-Modified信息,responose头信息中也带着这两个参数,如果一致,则表示要访问的资源没有发生改变,直接返回304,如果不一致,则表明资源改变,会请求服务端,返回200。


下面通过配置 缓存过期时间来让其实现缓存
配置语法:expires 【modified】time;
 expires epoch | max | off;
默认配置:expires off;
配置路径:http、server、location、if in location

使用demo测试

1. 修改default.conf配置文件,添加如下配置,暂时不添加缓存配置

2. 重新加载nginx,输入网址,看出客户端和服务端状态如下

由上图可以看出,第一次请求是没有缓存的,访问服务器返回200,并且再返回的信息头中返回了以上的两个参数 ETag和Last-Modified。下面我们刷新,再来看看效果

3. 刷新网页,查看状态

由上图看出,第二次请求,返回的状态是304,在请求信息头中有上图两个参数,与服务端返回的参数对比,发现是一致的,所以直接返回 304。下面我们配置缓存过期时间

4. 配置过期时间

5. 刷新网址,看看效果

由上图看出,服务器端返回的参数中有了过期时间,以及expires参数数据,因此过期时间配置成功。

最新文章

  1. 记录Tomcat7.x热部署配置过程
  2. JS 原型链图形详解
  3. AsyncEnumerableExtensions.cs z
  4. 【pyhton】【转】修改递归次数
  5. javascript 不间断向左滚动图片
  6. 【转】Xcode 7 真机调试详细步骤
  7. [转]Mysql导入导出工具Mysqldump和Source命令用法详解
  8. C++程序设计教程学习(0)-引子
  9. BNU OJ 50999 BQG's Approaching Deadline
  10. span表情输入框 --- Author: rose && lvyerose@163.com
  11. Centos7 tmux1.6 安装
  12. Android计时器实现
  13. tomcat管理界面登录无法进入
  14. android项目 之 记事本(11) ----- 加入数据库
  15. ASP.NET性能调试
  16. 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程
  17. js cookie跨域设置
  18. 第5天(半天)【shell编程初步、grep及正则表达式】
  19. Linux下Maven+SVN自动打包脚本
  20. EJB与JPA的关系

热门文章

  1. 使用Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页
  2. Python的并行求和例子
  3. TypeError: '<' not supported between instances of 'str' and 'int'
  4. Canal——增量同步MySQL数据到ElasticSearch
  5. coreDNS域名无法解析问题
  6. QQ群关系数据库处理
  7. HashPump用法
  8. docker MySQL官方版本使用记录
  9. LeetCode.1184-公交车站之间的距离(Distance Between Bus Stops)
  10. (转)window.XMLHttpRequest详解(AJAX工作原理)