Nginx Cache-Control

转自:http://www.javashuo.com/article/p-sgjqxdwn-t.htmlphp

 

HTTP协议的Cache-Control指定请求和响应遵循的缓存机制。
在请求消息或响应消息中设置 Cache-Control并不会影响另外一个消息处理过程当中的缓存处理过程。
请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。
响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。css

浏览器中关于Cache的3属性:html

Cache-Control:编程

设置相对过时时间, max-age指明以秒为单位的缓存时间. 若对静态资源只缓存一次, 能够设置max-age的值为315360000000 (一万年).浏览器

Http协议的cache-control的常见取值及其组合释义:缓存

no-cache: 数据内容不能被缓存, 每次请求都从新访问服务器, 如有max-age, 则缓存期间不访问服务器.服务器

no-store: 不只不能缓存, 连暂存也不能够(即: 临时文件夹中不能暂存该资源)代理

private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 如有max-age, 则缓存期间不访问服务器.orm

public: 能够被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等htm

max-age: 相对过时时间, 即以秒为单位的缓存时间.

no-cache, private: 打开新窗口时候从新访问服务器, 若设置max-age, 则缓存期间不访问服务器.

private, 正数的max-age: 后退时候不会访问服务器

no-cache, 正数的max-age: 后退时会访问服务器

点击刷新: 不管如何都会访问服务器.

Expires:

设置以分钟为单位的绝对过时时间, 优先级比Cache-Control低, 同时设置Expires和Cache-Control则后者生效.

Last-Modified:

该资源的最后修改时间, 在浏览器下一次请求资源时, 浏览器将先发送一个请求到服务器上, 并附上If-Unmodified-Since头来讲明浏览器所缓存资源的最后修改时间, 若是服务器发现没有修改, 则直接返回304(Not Modified)回应信息给浏览器(内容不多), 若是服务器对比时间发现修改了, 则照常返回所请求的资源.

注意:

Last-Modified属性一般和Expires或Cache-Control属性配合使用, 由于即便浏览器设置缓存, 当用户点击”刷新”按钮时, 浏览器会忽略缓存继续向服务器发送请求, 这时Last-Modified将可以很好的减少回应开销.

ETag将返回给浏览器一个资源ID, 若是有了新版本则正常发送并附上新ID, 不然返回304, 可是在服务器集群状况下, 每一个服务器将返回不一样的ID, 所以不建议使用ETag.

以上描述的客户端浏览器缓存是指存储位置在客户端浏览器, 可是对客户端浏览器缓存的实际设置工做是在服务器上的资源中完成的. 虽然刚才咱们介绍了有关于客户端浏览器缓存的属性, 可是实际上对这些属性的设置工做都须要在服务器的资源中作设置. 咱们有两种操做手段对浏览器缓存进行设置, 一个是经过页面指令声明来设置, 另一个是经过编程方式来设置.

Nginx的ngx_http_headers_module模块能够对Cache-Control头相关的东西进行配置
例如:
    # 相关页面设置Cache-Control头信息
    例一:
   if ($request_uri ~* "^/$|^/search/.+/|^/company/.+/") {
     add_header    Cache-Control  max-age=3600;
    }

   例二:

location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;
}

例三:
location ~ .*\.(js|css)$ {expires 10d;}
相关文章
相关标签/搜索