缓存的最后一层,是直接面对客户端的客户端缓存。通常也把这部分称为web缓存。web缓存位于客户端。缓存会根据进来的请求保存输出内容的复本,例如html页面、图片文件等,然后,当下一个请求来到时,如果是相同的URL,缓存直接使用复本相应请求访问,而不是向源服务器再次发送请求。
web缓存的具体实现是由浏览器来实现的。浏览器在计算机上开辟一块磁盘空间用于存储已经看过的网站的副本。浏览器缓存根据非常简单的规则进行工作:在同一个会话过程中会检查一次并确定缓存的复本足够新。这个缓存对于用户单击后退或者单击刚访问过的连接特别有用,如果你浏览过程中访问到同一个图片,这些图片可以从浏览器缓存中调用并即时显现。
一、客户端缓存规则
前段页面缓存主要遵循HTTP协议和客户端的设置工作。
1、不会缓存的情况如下:
- 如果相应头信息告诉缓存器不要保留缓存,缓存器就不会缓存相应内容。
- 如果请求信息需要认证或者加密安全,相应内容也不会缓存。
- 如果在回应中不存在校验器(ETag或者Last-Modified头信息),缓存服务器会认为缺乏直接的更新度信息,内容会被认为不可缓存。
2、将会缓存的情况如下:
- 含有完整的过期时间和寿命控制头信息,并且内容扔在保鲜期内。
- 浏览器已经使用过缓存副本,并且在一个会话中已经检验过内容的新鲜度。
- 缓存代理服务器近期内已经使用过缓存副本,并且内容的最后更新时间在上次使用期之前。
- 够新的副本将直接从缓存中送出,而不会向源服务器发送请求。
- 如果缓存的副本已经太旧了,缓存服务器将向源服务器发出校验请求,用于确定是否可以继续使用当前拷贝继续服务。
二、HTTP协议中的缓存使用
在客户端,通过浏览器发出第一次请求,请求某一个URL时,根据HTTP协议的规定,浏览器会向服务器传送报头,服务器响应同时记录相关属性标记,服务器的返回状态会是200;客户端第二次请求此URL时,根据HTTP协议的规定,浏览器会向服务器传送报头,服务器响应请求,并查询到标记文件有没有发生变动,服务器段返回304,浏览器收到此状态码后,直接从本地缓存中读取。
其中last-Modified、Expires和ETag是页面缓存表示:
1、Expires:告诉浏览器相关副本在多长时间内是新鲜的。过了这个时间,缓存器就会想服务器发送请求,检验文档是否被修改。该属性对设置静态图片文件可缓存特别有用。记住HTTP的日期时间必须是格林威治时间(GMT),而不是本地时间。
2、Cache-Control:HTTP1.1介绍了另外一组头信息属性。通过这个属性可以让网站发布者全面控制内容,并定位过期时间的限制。
- max-age=[秒]:缓存过期时间,单位是秒,从请求时间开始到过期时间之间的秒数;
- s-maxage=[秒]:类似于max-age属性,不同的是,他应用于共享(如代理服务器)缓存;
- public:标记认证内容也可以被缓存,一般来说,经过HTTP认证才能访问的内容,输出时自动不可以缓存的。
- no-cache:强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。
- on-store:强制缓存在任何情况下都不要保留任何副本。
- must-revalidate:如果服务器段明确指出资源的过期时间或者保鲜时间,并且声明了资源的修改时间或者ETag之类的表示,那么就有一个问题,在保鲜的时间内,如果用到了该资源,是不是要到服务器确认一下资源是否最新的。如果服务器声明了must-revalidate,则每次使用该资源都要确认该资源的新鲜性。
- proxy-pevalidate:支队缓存代理服务器起作用。
例如:cache-control:max-age=3600,must-revalidate
3、last-modified:文档的最后修改时间。客户端第一次访问,服务器段返回last-modified标记此文件在服务器段最后被修改的时间;第二次请求,根据HTTP协议的规定,浏览器会向服务器传送if-modified-since报头,询问该时间过后文件是否被修改过,如果服务器端没有变化,则自动返回HTTP 304状态,内容为空,客户端应用缓存资源,这样就节省了数据量。
4、ETag:服务器生成的唯一标识符ETag,每次副本的标签都会变化。客户端通过ETag询问服务器端资源是否改变。ETag和Last-Modified都能起到文档唯一性标示的作用。
三、通过php程序设置HTTP header信息
1、通过php程序设置header来控制缓存的生成和过期的策略
header('Cache-Control:max-age=86400,must-revalidate'); header('Last-Modified:'.gmdate('D,d M Y H:i:s').'GMT'); header('Expires:'.gmdate('D,d M Y H:i:s',time()+'86400').'GMT');
点击页面中的链接,利用浏览器的回退按钮返回,再次单击页面中的链接,无论如何后退和点击链接,网络请求URL这一条始终未灰色,表示浏览器并没有发起实际的网络请求,而直接用的浏览器缓存,除非缓存过期。
注意:只有出现三种情况浏览器才会更新缓存----缓存到期;缓存被清除;按F5或Ctrl+F5强制刷新。
2、通过php程序设置header,每次请求都从服务器获取数据
//告诉浏览器不使用缓存,HTTP1.1协议 header("Cache-control:no-cache,must-revalidate"); //告诉客户端浏览器不适用缓存,兼容HTTP1.0协议 header("Pragma:no-cache");
四、通过nginx配置设置浏览器缓存
nginx可以通过 expires 指令来设置浏览器的Header
- 语法: expires [time|epoch|max|off]
- 默认值: expires off
- 作用域: http, server, location
使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标(起到控制页面缓存的作用)。
- 可以在time值中使用正数或负数。“Expires”头标的值将通过当前系统时间加上您设定的 time 值来获得。
- epoch 指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。
- max 指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。
- -1 指定“Expires”的值为 服务器当前时间 -1s,即永远过期
例子如下:
//图片缓存三十天 location ~.*\.(jpg|png|jpeg)$ { expires 30d; } //js css缓存一小时 location ~.*\.(js|css)?$ { expires 1h; }
相关推荐
**正文** 标题:“Web应用服务器缓存浅谈PPT” 在Web开发中,服务器缓存是一种提高性能和响应速度的关键技术。...通过阅读并研究这个PPT,我们可以深化对这一重要技术的认识,为我们的IT事业添砖加瓦。
Memcache是一种广泛应用于Web开发中的分布式内存对象缓存系统,它可以大大提高应用程序的性能,通过将数据存储在内存中,减少对数据库的访问次数,从而降低了系统的响应时间。本课件和源码旨在帮助你深入理解和实践...
提出的基于文件预测的分布式缓存模型,即DLSDCM模型,通过在客户端建立文件预测模型,预测用户将要访问的文件,从而在服务器空闲时提前将数据传输到客户端缓存中。此方法可以有效隐藏磁盘I/O延迟,提升服务器的使用...
8. **图片加载**:对于新闻中的图片,一般不直接下载到内存,而是使用像SDWebImage这样的第三方库,进行异步加载和缓存,以节省资源。 9. **动画效果**:为了提升用户体验,网易新闻客户端可能会包含一些动画效果,...
这种技术允许将数据库中的数据存储在内存中,以便快速响应客户端的请求。然而,随着技术的发展,尤其是ASP.NET 2.0与SQL Server的结合,数据缓存也带来了一些安全问题,其中最显著的是“隐蔽通道”问题。 隐蔽通道...
2. 总体架构:Gcache的架构由多个角色组成,包括客户端(Client),代理(Proxy),Redis副本集(RedisGroup),监控(Monitor)和Zookeeper。代理负责分发请求,监控负责对Redis进行健康检查和故障转移。Zookeeper...
通过以上介绍,我们对广西电信数字校园客户端CampusClientV2.03有了较为全面的认识。该客户端不仅具备多项实用功能,还注重用户体验和技术安全保障,在提升校园网络服务质量方面发挥着重要作用。希望这些信息能够...
用户和企业都需要认识到这种追踪技术的双刃剑特性,既有利于个性化服务的提供,也对用户的隐私安全提出了挑战。用户需要通过采取一定的防护措施来保护自己的隐私,而企业则应当在收集和使用这些数据时,充分考虑到...
- **OkHttp**:高效的网络库,提供了缓存、连接池等功能,是Android开发中的常用选择。 - **Retrofit**:基于OkHttp的网络请求库,支持接口定义和自动转换,简化了网络请求的编写。 3. **JSON解析**: - **Gson*...
通过对《Web缓存技术入门》文档的学习和总结,我们不仅了解到Web缓存技术的基础理论及其在实际场景中的应用价值,还对其未来发展有了更深入的认识。在未来的工作和学习过程中,希望各位能够灵活运用这些知识,不断...
- SVN客户端缓存破坏:Facebook使用SVN版本控制来管理代码,通过缓存版本号来防止从缓存中错误地返回旧的代码版本。 此外,为了展示如何编写和使用缓存函数,Lucas Nealan在演讲中提到了一个具体的缓存函数`cache_...
Web高速缓存结构是为了减少由客户端产生的网络流量,通过在不同节点间共享缓存来实现。缓存服务器可以通过相邻缓存查询信息,根据命中或未命中消息来决定如何进行数据检索。ICPv2协议中,有局次模型和分布式模型两种...
在深入探讨模拟jQuery与服务器端通信的代码之前,我们需要了解一些基础知识...通过这个案例,开发者可以更深入地理解和掌握如何使用jQuery和Servlet技术来构建动态的Web应用,并对Web开发中的常见问题有所认识和准备。
- **客户端缓存**:利用localStorage或sessionStorage存储数据,避免重复请求。 - **服务器端缓存**:对于经常访问且不经常改变的数据,可以采用服务器端缓存机制。 ### 六、实战案例分析 在实际开发过程中,结合...
《决战Nginx系统卷:高性能Web服务器详解与运维》第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于...
《决战Nginx系统卷:高性能Web服务器详解与运维》第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于...
《决战Nginx系统卷:高性能Web服务器详解与运维》第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于...
《决战Nginx系统卷:高性能Web服务器详解与运维》第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于...
通过对DNS工作流程、缓存机制以及区域划分的理解,我们可以更深入地认识到DNS如何高效地将人类可读的域名转化为机器可识别的IP地址,进而实现互联网上的信息交流与资源共享。随着互联网技术的不断发展,DNS系统也在...