浏览器缓存策略

浏览器缓存策略

为了提升站点的访问速度,使用缓存来优化。缓存主要分为 强缓存和协商缓存。node

协商缓存

主要分为last-modified、etag。下面我主要经过代码修改来表现各个缓存之间的区别。先讨论协商缓存。last-modified表示文件的修改日期,若是文件作了修改那就应该从新获取文件。last-modified是文件修改后根据服务器的时间生成。 web

no-store

若是咱们修改了文件则会从新获取,status就为200 apache

修改文件

再次刷新就会返回304表示缓存已是最新不须要再更新。 请求中会询问相关文件修改时间(If-Modified-Since)浏览器

请求 缓存

响应 服务器

**ETag:**是一个能够与Web资源关联的记号(token)负载均衡

若是文件被替换,就会生成惟一的etag。测试

替换前的文件 优化

替换后的文件 this

PS: 若是是使用了多台服务器作负载均衡的话,会出现etag不一致问题。Apache 的默认ETag的值老是由文件的索引节点(Inode)、大小(Size)、最后修改时间(MTime)决定,咱们只须要去掉Inode便可

强缓存

强缓存相比协商缓存更为完全,在协商缓存下浏览器不会对服务器发起请求。

**强缓存:**主要分为expires和cache-control

Expires: 表示存在时间,容许客户端在这个时间以前不去检查(发请求),等同max-age的 效果。可是若是同时存在,则被Cache-Control的max-age覆盖。 格式: Expires :时间,后面跟一个时间或者日期,超过这个时间后缓存失效。也就是浏览器发出请求以前,会检查这个时间是否失效,若失效,则浏览器会从新发出请求。

开启apache expires_mod以后,浏览器在第一次将资源请求以后会缓存。

Cache-Control Cache-Control 在 HTTP 响应头中,用于指示代理和 UA 使用何种缓存策略。好比:

  • no-cache 为本次响应不可直接用于后续请求(在没有向服务器进行校验的状况下)
  • no-store 为禁止缓存(不得存储到非易失性介质,若是有的话尽可能移除,用于敏感信息)
  • public为你们均可以缓存。
  • private为仅 UA 可缓存

cache-control中设置max-age 为最长的缓存时间。在该时间内则使用缓存。

设置为no-cache以后则不会再进行缓存。

题外话

在使用apache对浏览器缓存进行测试过程当中发现。在不设置 cache-control的状况下,浏览器会根据自身的状况去取舍相关的缓存,能够从这查看。若是你们在服务器配置过程当中发现,本身没有配置任何的缓存信息可是浏览器却缓存了资源就不用惊讶。

相关文章
相关标签/搜索