`

nginx 控制页面缓存

阅读更多
<!-- 正文 -->

语法: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响应头来确定。如图:
第一次访问:
请求:


返回:


第二次访问:
请求:


返回:


这时返回的状态码是304,而在请求中比第一次多了If-Modified-Since头,和原始服务器中的Last-Modified制作比较,所以实现浏览器缓存并判断是否过期。
简单的说,Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,只是Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since则是由客户端往服务器发送的头,可以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since头将先前服务器端发过来的 Last-Modified最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则返回304告诉客户端其本地cache的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。

如果不想让代理或浏览器缓存,加no-cache参数或private参数:
# expires 1d;
add_header Cache-Control no-cache;
add_header Cache-Control private;




etag:实体标签,是用来确认web服务器和浏览器缓存有效性的一种机制。原始服务器使用ETag响应头来指定组件的ETag浏览器通过If-None-Match头将ETag传回原始服务器。如果匹配,返回304
如图:
第一次访问:
请求:


返回:


第二次请求:


返回:


依然返回的状态码是304,而在请求中比第一次多了If-None-Match头。所以实现浏览器缓存。如果这个值对不上,则缓存过期。
ETags和If-None-Match是一种常用的判断资源是否改变的方法。类似于Last-Modified和HTTP-If-Modified-Since。但是有所不同的是Last-Modified和HTTP-If-Modified-Since只判断资源的最后修改时间,而ETags和If-None-Match可以是资源任何的任何属性。
ETags和If-None-Match的工作原理是在HTTPResponse中添加ETags信息。当客户端再次请求该资源时,将在HTTPRequest中加入If-None-Match信息(ETags的值)。如果服务器验证资源的ETags没有改变(该资源没有改变),将返回一个304状态;否则,服务器将返回200状态,并返回该资源和新的ETags。

IIS上的ETag格式需要修改。

另一篇文章讲解的也非常清楚: http://www.jb51.net/article/33214.htm

<!-- 版权 -->
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    使用Nginx作缓存服务器以及删除其缓存文件的方法

    Nginx支持多种缓存控制指令,例如proxy_cache、proxy_cache_valid等,能够指定哪些响应需要被缓存,以及缓存的有效时间。这些指令在http、server或者location块中配置。 另外,Nginx还可以通过模块控制缓存的大小和...

    nginx缓存不起作用问题解决方法

    总结来说,解决nginx缓存不起作用的问题,可以通过修改源服务器的响应头或直接在nginx配置中使用proxy_ignore_headers指令来控制nginx的缓存行为。需要注意的是,忽略服务器端的缓存控制可能会影响到内容的实时更新...

    Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    ### Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解 #### 一、前言 Nginx是一款广泛使用的高性能HTTP和反向代理Web服务器,也是邮件代理服务器,并具有IMAP/POP3/SMTP服务。Nginx以其稳定性、丰富的...

    nginx expires控制页面缓存

    语法:expires [time|epoch|max|pff]默认值:offexpires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用time:可以使用正数或负数。“Expires”头标的值将通过当前系统...

    nginx TOMCAT 文件下载 上传 进度条 缓存

    标题 "nginx TOMCAT 文件下载 上传 进度条 缓存" 涉及到的是在Web服务器场景中,如何利用Nginx和Tomcat处理文件的下载、上传以及实现进度条显示和缓存优化的技术点。下面将详细介绍这些内容。 1. **Nginx与Tomcat的...

    Nginx_反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    ### Nginx_反向代理、负载均衡、页面缓存、URL重写及读写分离详解 #### 一、前言 Nginx是一款广泛使用的高性能HTTP和反向代理Web服务器,也是常用的邮件代理服务器。它以其高稳定性、丰富的功能集、简单的配置方式...

    如何在nginx中配置缓存静态文件

    在Nginx中配置缓存静态文件是一种优化网站性能的有效方式,它可以减少服务器负载,节省带宽,并提高用户访问速度。下面将详细讲解如何在Nginx中进行配置。 首先,确保你已经安装了Nginx。如果没有,可以参照相关的...

    nginx缓存页面后 串会话问题的解决方法

    当开启缓存后,Nginx会将动态内容转化为静态页面存储起来,对于后续相同请求,直接返回缓存内容,而不是再次生成。然而,这种机制在处理需要个性化或有安全需求(如登录状态、用户信息)的页面时,如果没有正确配置...

    nginx缓存及错误页面配置

    本文将详细介绍nginx的缓存配置以及错误页面设置,这些设置对于提升nginx服务器性能和用户体验有重要的作用。 首先,我们需要明白浏览器缓存的基本概念。浏览器缓存是指浏览器在本地机器上存储静态文件,比如图片、...

    讲解Nginx服务器中设置本地浏览器缓存的简单方法

    在现代互联网应用中,浏览器缓存是一种优化技术,它能够缓存用户的资源请求,以减少服务器的负载,加快网页的加载速度,同时降低网络带宽的消耗。在Web服务器中,Nginx是一个高性能的HTTP和反向代理服务器,它也可以...

    nginx设置资源缓存实战详解

    为了进一步理解缓存的控制,文章展示了如何通过修改nginx配置文件来禁用强缓存。在这个实验中,通过在location块中添加add_header Cache-Control指令,并设置其值为no-cache或no-store,来控制缓存行为。设置no-...

    页面缓存处理方案文档,解决前后端页面缓存

    1. **页面内容缓存控制**: 通过在`&lt;head&gt;`标签内添加特定的HTTP头部元信息,可以禁止浏览器缓存页面内容。例如: ```html ``` 这些标签告诉浏览器不要缓存页面,每次访问都应获取最新内容。 2. **CSS...

    nginx-cache-control:没有缓存清除模块的 Nginx 缓存控制插件

    nginx-缓存控制没有缓存清除模块的 Nginx 缓存控制插件部分代码是基于其他 Nginx Cache Plugins 的代码,但这是设计为简单、轻量级的实现== 具体.... == Mark Jaquith 提出了使用强制动态页面加载的标头的基本设计,...

    nginx系列(十七)nginx下的gzip与vary、预压缩、缓存、反向代理的结合

    同时,`proxy_cache_bypass`和`proxy_no_cache`可以控制何时绕过缓存,而`proxy_cache_valid`则定义了缓存内容的有效时间。 最后,我们来看看反向代理。Nginx作为反向代理服务器,可以将客户端请求转发到后端服务器...

    实战Nginx.取代Apache的高性能Web服务器

    9.3 新浪网开源软件项目——基于Nginx的NCache网页缓存系统 第3部分 实战篇 第10章 Nginx在国内知名网站中的应用案例 10.1 Nginx反向代理与负载均衡类网站应用案例 10.2 Nginx+PHP类网站应用案例 第11章 Nginx...

    Nginx与浏览器缓存的处理方法

    本文将探讨Nginx服务器如何与浏览器协同处理缓存,以及如何通过Nginx配置实现更精确的缓存控制。 **一、浏览器对缓存的处理** 浏览器对缓存的处理主要由用户设定的Internet选项决定,这影响了浏览器何时向服务器...

    nginx安装包

    8. 验证安装:在浏览器中输入服务器的 IP 地址或域名,如果看到 Nginx 的默认欢迎页面,说明安装成功。 9. 定期维护:为了保持 Nginx 的稳定性和安全性,记得定期检查更新,并根据需要升级到新版本。 以上就是 ...

    守护网络门户:Nginx访问控制列表(ACL)配置秘籍

    Nginx(发音为 "engine-x")是一个高性能的HTTP和反向代理服务器,它以事件驱动和异步非阻塞...6. **缓存机制**:Nginx支持HTTP缓存,可以缓存静态内容以提高响应速度和减轻后端服务器的负载。 7. **配置简单**:Nginx

Global site tag (gtag.js) - Google Analytics