当您在网上浏览网页时,浏览器会将您访问的资源存储在本地缓存中。这个过程被称为浏览器缓存。浏览器缓存可以提高网页加载速度,减少服务器负载,以及减少网络流量。在本文中,我们将探讨浏览器缓存的工作原理,以及如何利用浏览器缓存提高网站性能。
在没有浏览器缓存之前,所有的请求都需要服务器来处理,请求太多服务器压力大了就会罢工。
于是,浏览器缓存就诞生了,但是随之而来的问题就是:当服务器资源更新后,浏览器无法及时拿到服务器新的资源。
expires的作用就是在服务器在返回资源的同时,会携带一个设定的过期时间,缓存拿到这个值后,就可以知道资源有没有过期。
但是,expires返回的是服务端的时间,而缓存用来比对判断的却是客户端时间,那如果服务端和客户端的时间不一致可怎么办?
所以,在HTTP1.1中,引入了Cache-Control(缓存控制)
与 expires不同的是,Cache-Control 采用了过期时长来判断资源是否过期,这样就不会有因为服务端和客户端的时间不一致而产生的问题
在Cache-Control被引入不久后,服务器又开始抱怨了,请求还是太多了,有些资源缓存过时了,但是服务器内部数资源并没有被修改,于是我们就将缓存分割成 强缓存 和 协商缓存
强缓存如上所诉,在过期时间内,浏览器直接从缓存中取得资源
而在资源过期后,便会启用协商缓存,而协商缓存使用到的值便是 Last-Modified(上一次更改时间)(以秒为单位)
服务器会在返回资源时,带上Last-Modified,而在之后浏览器每次请求时,都会带上
If-Modified-Since 字段,值就是Last-Modified,服务器接收到后就会去比对两个值是否相等,若相等则返回304告诉浏览器可以使用缓存,若不相等,则返回新的资源,状态码为200。
在使用Last-Modified之后,服务器果然轻松多了,又开心的回去工作了。之后的一天,用户突然发现,服务器的资源在改变之后,竟然还告诉浏览器可以使用协商缓存,这是怎么回事呢?
原来Last-Modified是以秒为单位记录的,那资源如果在1秒内发生了变化,Last-Modified是无法感知到的,那要怎么办呢?
ETag 闪亮登场,在服务器返回资源时会携带上ETag (文件内容的唯一标识),那么,最终的缓存机制在此诞生