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与浏览器缓存的处理方法,希望对大家有所帮助