当前位置 主页 > 服务器问题 > nginx问题汇总 >

    nginx expires控制页面缓存

    栏目:nginx问题汇总 时间:2018-11-21 16:03

    expires 指令可以控制 HTTP 应答中的“Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用) 语法:expires [time|epoch|max|pff]默认值:offexpires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。time值还控制"Cache-Control"的值:负数表示no-cache正数或零表示max-age=time epoch:指定“Expires”的值为 1January,1970,00:00:01 GMTmax:指定“Expires”的值为31December2037 23:59:59GMT,"Cache-Control"的值为10年。-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。off:不修改“Expires”和"Cache-Control"的值

    expires使用了特定的时间,并且要求服务器和客户端的是中严格同步。
    而Cache-Control是用max-age指令指定组件被缓存多久。
    对于不支持http1.1的浏览器,还是需要expires来控制。所以最好能指定两个响应头。但HTTP规范规定max-age指令将重写expires头。

    如果不想让代理或浏览器缓存,加no-cache参数或private参数:
    # expires 1d;
    add_header Cache-Control no-cache;
    add_header Cache-Control private;
    这样浏览器F5刷新时,返回的依然是200,而不是304.

    记录一个nginx控制缓存的例子:
           expires 1d;
           add_header Cache-Control no-cache;
           add_header Cache-Control private;
           if ( !-e $request_filename) {
           rewrite ^(.*) http://test.zhaopin.com/index.html break;
      #   add_header Cache-Control no-cache;
      #   add_header Cache-Control private;
    当我将add_header写在rewrite之后时,发现add_header竟然不起作用了。。是因为写进了if里面..


    apache的mod_expires模块使得在使用expires头时能像max-age那样以相对的方式设置日期,通过ExpiresDefault指令完成。例如:图片等过期时间为请求开始的10年之后
    <FileMatch"\.(gif|jpg|js|css)$">
    ExpiresDefault "access plus 10years"
    </FileMatch>
    它像响应中发送Expires头和Cache-Control max-age头。

    expires|etag控制页面缓存区别expires:像上面文章提到的:expires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。time值还控制"Cache-Control"的值:负数表示no-cache正数或零表示max-age=time epoch:指定“Expires”的值为 1January,1970,00:00:01 GMTmax:指定“Expires”的值为31December203723:59:59GMT,"Cache-Control"的值为10年。-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。off:不修改“Expires”和"Cache-Control"的值

    expires使用了特定的时间,并且要求服务器和客户端的是中严格同步。
    而Cache-Control是用max-age指令指定组件被缓存多久。
    对于不支持http1.1的浏览器,还是需要expires来控制。所以最好能指定两个响应头。但HTTP规范规定max-age指令将重写expires头。一般用于页面变化不是很快的时候,如果缓存过期了,浏览器在重用它之前会首先确认他是否有效,就是一个“条件GET请求”,如果有效,返回304状态码。expires通过Last-Modified响应头来确定。如图: