1. 前言
想必各位年轻人
,一定都遇到过浏览器缓存
的问题,浏览器缓存
一般都是作为浏览器优化方式存在,减少资源的请求以及加快网站加载速度。但是如何去设置呢?
2. 浏览器缓存
想了解这个问题,就必须要知道浏览器的缓存原理
,各位年轻人可以参考这篇文章--浏览器缓存看这一篇就够了 - 知乎 (zhihu.com)。看完这篇文章,我们主要需要清楚两个概念强缓存
和协商缓存
。
2.1 强缓存
强缓存
就比较通俗易懂
了,反正如果response
中存在Cache-control:max-age:xxxxx
或者Expires
,我就开启强缓存
,只要在限定的时间
内,我就访问内存
或者磁盘中的缓存
,可以看个简单的例子:
这个是vite
的强缓存
,然后我们看看它的response
:
可以看到,它设置了Cache-Control:max-age:xxxxx
,当然它还更加严格的
加了个immutable
,保证不过期,不请求
,immutable
的特性可以看--Cache-Control - HTTP | MDN (mozilla.org)。
2.1 协商缓存
当然强缓存
还是具有一定的问题的,例如我重新发布了,但是你一定得到期才会重新请求
,所以这时候就得使用协商缓存,当然协商缓存一般由Etag
和Last-Modified
两个头一起控制
,可以看个例子:
Etag
就是文件的一个标识
,可以用hash
来实现,由浏览器
发送If-None-Match:之前返回的Etag
,来让服务端进行验证。当然还有另一个控制头----Last-Modified
,这个含义是文件的最后修改时间
,由浏览器
发送If-Modified-Since
来进行验证,看个例子:
3. 实战
3.1 设置强缓存
当然,浏览器是默认开启缓存
的。所以,我们可以在服务端做一些细致的配置
,这里我们使用chrome
+ 微软省钱宝IIS
,首先打开网站的控制面板
,并选择HTTP 响应头
:
并设置之后一天过期
:
添加完成之后,打开浏览器,并打开devtools
,并将禁用缓存
勾掉:
这时可以看到,响应头
添加了Cache-Control:max-age=86400
说明设置成功。当然我们也可以验证一下,设置的准不准确
,实际上max-age
设置的是s
,所以只要将86400
换算成小时:
可以看到,确实是24小时
。
当然也可以设置Expires
:
可以查看响应头: 当然Cache-Contol
的优先级比Expires
高。
3.2 设置协商缓存
设置协商缓存
,可以使用IIS
如下设置:
此时要选择立即
,这个表明response
会返回Cache-Control:no-cache
,从而使得每次
请求都会请求服务器:
所以可以看到304
,即每次请求都由服务器验证
。