共计 1855 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | 这篇文章主要介绍了 Nginx 缓存设置案例详解, 本篇文章通过简要的案例, 讲解了该项技术的了解与使用, 以下就是详细内容, 需要的朋友可以参考下 |
在开发调试 web 的时候,经常会碰到因浏览器缓存 (cache) 而经常要去清空缓存或者强制刷新来测试的烦恼,提供下 apache 不缓存配置和 nginx 不缓存配置的设置。在常用的缓存设置里面有两种方式,都是使用 add_header 来设置:分别为 Cache-Control 和 Pragma。
nginx:
location ~ .*\.(css|js|swf|php|htm|html)$ {add_header Cache-Control no-store;add_header Pragma no-cache;}
对于站点中不经常修改的静态内容(如图片,JS,CSS),可以在服务器中设置 expires 过期时间,控制浏览器缓存,达到有效减小带宽流量,降低服务器压力的目的。
以 Nginx 服务器为例:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
#过期时间为 30 天,#图片文件不怎么更新,过期可以设大一点,#如果频繁更新,则可以设置得小一点。expires 30d;
}
location ~ .*\.(js|css)$ {expires 10d;}
【背景】:Expires 是 Web 服务器响应消息头字段,在响应 http 请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。
【相关资料】
1、Cache-control 策略
Cache-Control 与 Expires 的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过 Cache-Control 的选择更多,设置更细致,如果同时设置的话,其优先级高于 Expires。
http 协议头 Cache-Control:
值可以是 public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
各个消息中的指令含义如下:
- Public 指示响应可被任何缓存区缓存。
- Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
- no-cache 指示请求或响应消息不能缓存
- no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
- max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
- min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
- max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定 max-stale 消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Last-Modified/If-Modified-Since
- Last-Modified/If-Modified-Since 要配合 Cache-Control 使用。
- Last-Modified:标示这个响应资源的最后修改时间。web 服务器在响应请求时,告诉浏览器资源的最后修改时间。
- If-Modified-Since:当资源过期时(使用 Cache-Control 标识的 max-age),发现资源具有 Last-Modified 声明,则再次向 web 服务器请求时带上头 If-Modified-Since,表示请求时间。web 服务器收到请求后发现有头 If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应 HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的 cache。
其最终达到的就是等效于设置这三类 html 缓存技术:
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/>
<meta http-equiv="expires" content="0"/>
正文完
星哥玩云-微信公众号