Nginx与浏览器缓存的处理方法
一、浏览器对缓存的处理:Internet选项
★ 控制请求服务器策略:是忽略资源的缓存策略的情况下额外强制请求服务器的意思。
★ 检查存储的页面较新版本
1.每次访问网页时
不管是否有缓存、资源状态是否过期,都会再次请求服务器。
2.每次启动Internet Explorer时
不管是否有缓存、资源状态是否过期,都会再次请求服务器。
3.自动
大体上和2是一样的,只是对于图片的策略有点不同。
4.从不
完全按照资源的缓存策略来请求服务器。
★ F5 刷新:请求服务端,但是会根据和服务器对比文件来确定是否下载
★ Ctrl + F5刷新:一定会去服务器下载。
二、缓存控制策略
★Last-Modified/If-Modified-Since要配合Cache-Control使用,Etag/If-None-Match也要配合Cache-Control使用。
ps: 分布式系统里多台机器间文件的last-modified必须保持一致,以免负载均衡到不同机器导致比对失败
分布式系统尽量关闭掉Etag(每台机器生成的etag都会不一样)
★HTML通过meta的http-equiv属性控制浏览器缓存策略:通过设置Pragma和Cache-control和expires控制
ps:只能控制html的缓存策略,不能控制css/js/图片的缓存策略。
Cache-control的max-age和expires同时存在,那么先处理max-age。
Cache-control指定了no-cache后,max-age和expires。
Pragma: http 1.0 IE浏览器才识别,请求头中不会体现,但是确实有效果
Cache-control: http 1.1
三、Nginx设置浏览器缓存
★Nginx设置浏览器缓存:可以在http 、server、location节点中添加。可以设置各种资源的缓存策略,不仅仅是HTML。而<meta http-equiv>节点只针对HTML
#add_header Cache-Control no-cache; #add_header Cache-Control private; add_header Cache-Control max-age=7200; if ($request_filename ~* ^.*?\.(ico|jpeg|gif|jpg|png|woff)$){ expires 7d; } if ($request_filename ~* ^.*?\.(js|css)$){ expires 7d; } if ($request_filename ~* ^.*?\.(html|htm)$){ expires 3d; }
★Nginx中的配置会覆盖HTML的http-equiv="Cache-control"配置。
但是如果HTML中的加了下面3个标签,浏览器端效果还是只能no-cache。(从效果上来看:Nginx的Cache-control配置无效)
因为Nginx的Cache-control配置只是覆盖了Cache-control(如果html加的是后面两个标签,Nginx还是有效的),而Pragma仍然起着作用。
<meta http-equiv="Pragma" content="no-cache"/> <meta http-equiv="Cache-control" content="no-cache;max-age=0"/> <meta http-equiv="expires" content="0"/>
总结
以上所述是小编给大家介绍的Nginx与浏览器缓存的处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- 数据库表反向生成(一) MyBatis-generator与IDEA的集成
- 数据库表反向生成(二) Django ORM inspectdb
- RabbitMQ与AMQP协议
- 大数据算法设计模式(2) - 左外链接(leftOuterJoin) spark实现
- hs_err_pid
- django celery的分布式异步之路(二) 高并发
- django celery的分布式异步之路(一) 起步
- SpringMVC拦截器Interceptor
- 元宵快乐:看SQL大师们用SQL绘制的团圆
- Python Redis pipeline操作
- python concurrent.futures
- Deepmind的星际争霸2强化学习教程(1):建立环境与训练模型
- python contextlib 上下文管理器
- Django扩展自定义manage命令
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tensorflow ActiveFunction激活函数解析
- C++核心准则Con.1:默认情况下使对象不可修改
- 进化算法个体和指标的一致性
- matlab代码折叠与分节注释
- Flask从零到一 1 | 虚拟环境和第一个flask程序
- 按照元素指定条件筛选结构体数组
- 多目标优化按支配关系分层实现
- CentOS 7 解决丢失 nginx.pid
- $(function(){})和$(document).ready(function(){})
- javascript中的setTimeout() 方法和clearInterval() 方法和setInterval() 方法
- matlab生成数字1-n的列向量
- JavaScript中的匿名函数及函数的闭包
- ios下Safari无法触发click事件的处理
- 禁止网页右键、复制、另存为、查看源文件等功能
- ajax知识点