强缓存介绍: 状态码为200
强缓存之后不需要再向服务器发送请求。 而是从浏览器读取分为(内存缓存)(硬盘缓存),
缓存时间到期后就会向服务器重新发送请求
memory cache(内存缓存)内存缓存存储在浏览器内存当中,一般刷新网页的时候会发现很多内存缓存
disk cache(硬盘缓存)硬盘缓存是存储在计算机硬盘中,空间大,但是读取效率比内存缓存慢
静态资源的缓存
app.use(express.static('./static',{
maxAge:1000*60*5 // 强缓存的时间
lastModified:true // 协商缓存
}))
动态资源缓存 接口
强缓存 Expires的使用
app.get('/api',(req,res)=>{
// 里面是缓存的时间
res.setHeader('Expires',new Data('2024-4-22 12:00:00').toUTCString())
res.send('111')
})
强缓存 Cache-Control
public 任何服务器都可以缓存 private只能浏览器缓存
app.get('/api',(req,res)=>{
// 里面是缓存的时间
res.setHeader('Cache-Control','public',max-age=60) 60s
res.send('111')
})
如果两种缓存同时存在的话 以 max-age的时间为准了
协商缓存的状态码为304
强缓存和协商缓存同时出现 浏览器优先于强缓存
解决这个问题: no-cache告诉浏览器走协商缓存不要走强缓存
const getFileModifyTime = ()=>{
return fs.statSync('./index.js').mtime.toISOString() // 读取文件最后的修改时间
}
app.get('/api3',(req,res)=>{
res.setHeader('Cache-Control','no-cache') // 不要浏览器走强缓存
//浏览器会自动携带请求头的信息 时间 获取浏览器的时间和修改时间进行对比
const ifModeifiedSince = req.headrs['if-modified-since']// 获取浏览器请求头的信息
// 获取文件最后修改的时间
const modifyTime = getFileModifyTime()
if(ifModeifiedSince===modifyTime) { // 如果相同找协商缓存
res.statusCode = 304
res.end()
return false
}
res.setHeader('Last-Modified',modifyTime) // 设置文件最后修改的时间
res.send('cache-control')
})