为了提升站点的访问速度,使用缓存来优化。缓存主要分为 强缓存和协商缓存。node
主要分为last-modified、etag。下面我主要经过代码修改来表现各个缓存之间的区别。先讨论协商缓存。last-modified表示文件的修改日期,若是文件作了修改那就应该从新获取文件。last-modified是文件修改后根据服务器的时间生成。 web
若是咱们修改了文件则会从新获取,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 使用何种缓存策略。好比:
cache-control中设置max-age 为最长的缓存时间。在该时间内则使用缓存。
设置为no-cache以后则不会再进行缓存。
在使用apache对浏览器缓存进行测试过程当中发现。在不设置 cache-control的状况下,浏览器会根据自身的状况去取舍相关的缓存,能够从这查看。若是你们在服务器配置过程当中发现,本身没有配置任何的缓存信息可是浏览器却缓存了资源就不用惊讶。