You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
输入URL
查看缓存
i. 如果资源未缓存,发送新请求
ii. 如果已缓存,检验是否新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证
iii. 检验新鲜有两个HTTP头进行控制Expires和Cache-Control:
HTTP1.0提供Expires,值为一个绝对时间表示缓存新鲜日期
HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大新鲜时间
浏览器解析URL获取协议、主机、端口和path
浏览器组装
关于缓存
什么是缓存
缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服务器端的缓存,有代理服务器的缓存, 有ASP.NET页面缓存,对象缓存。 数据库也有缓存, 等等。http中具有缓存功能的是浏览器缓存,以及缓存代理服务器。http缓存的是指:当Web请求抵达缓存时, 如果本地有“已缓存的”副本,就可以从本地存储设备而不是从原始服务器中提取这个文档
为什么要使用缓存
私有缓存
专用的缓存被称为私有缓存,它不需要很大的动力或者存储空空间,这样就可以做的很小,比较便宜。我们的web浏览器中就有私有内存,它们大多都存在我们电脑的个人磁盘和内存中,并且允许设置大小等。在浏览器的地址输入框和直接F5刷新采用的是不同的机制,前者会查看是否有有效的缓存,有效的缓存会组织请求流向原始服务器,后者会直接询问原始服务器,验证更变
公有缓存
公有缓存是特殊的共享代理服务器,它会接收来自多个用户的访问,代理缓存会从本地的缓存中提供文档,对于流行的对象缓存只需要取一次就可以了,它会用共享的副本为所有的请求服务,以降低网络的流量。
缓存的处理步骤
接收
缓存从网络中读取抵达的请求报文
解析
缓存对报文进行解析,提取URL和各种首部。
查找
缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保存到本地)。
缓存无法保存世界上的每份文档,当可以用已有的副本为某些到达缓存的请求提供服务时成为缓存命中,从而衍生出缓存命中率和字节命中率等概念。其他一些到达缓存的请求可能会由于没有副本可用被转发给原始的服务器,这称为未命中。
再验证:原始服务器的内容很可能发生变化(下面的新鲜度检测会详细讲解)缓存要不时的对其进行检测,这个过程并不需要从服务器获取整个对象,就可以快速检测。在项目的开发中也有可能因为缓存的问题使我们原本的改动无法呈现。
缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。(首部自身都可以强制缓存的验证)
仅仅是已缓存文件过期了并不意味着它和原始服务器上目前处于活跃状态的文档有实际的区别,只是说到了要审核的时间了,说明缓存需要访问原始服务器是否发生了变化。如果发生了变化,缓存会获取一份新的文档副本,并且将其存到旧的文档的位置上;如果没有发生变化,缓存只需要获取新的首部,包括一个新的过期日期,并对缓存中的首部进行更新。
- 用条件方法进行验证
与上面不同,这个方法是通过一个额外的标签来识别版本(附加到文档上的任意标签或者引用字符串),因为在某些情况下仅仅使用上面的方法是不够的,例如:有些文档会周期性的修改但是包含的数据是一样的,有些数据可能被修改了但是这个修改并不是很重要;有些服务器无法获取到修改时间等。
缓存会用新的首部和已缓存的主题来构建一条响应报文。
缓存通过网络将响应发回客户端
缓存可选地创建一个日志文件条目来描述这个事务。
设置缓存控制
不同的web服务器为HTTP Cache-control 和 Expiration 首部的设置提供了一些不同的机制
Apache Web 服务器提供了几种设置HTTP缓存控制首部的机制,其中很多机制需要人为启动。
通过这个模块可以单独对首部进行设置(设置单个HTTP首部指令来扩充Apache的配置文件),下面是将文件都标识为非缓存的实例:
`
<Files *.html>
Header set Cache-control on-cache
The text was updated successfully, but these errors were encountered: