Cache-Control
希望某请求被缓存,加一个响应头
response.setHeader('Cache-Control','max-age=300000000')
max-age=300000000表示300000000s内再次执行,直接从缓存中读取内容,不请求,下载时间为0,不会重新下载
注意:
1.首页不要设置缓存,特别是html
2.通常max-age设置的时间比较长,若有升级或改变,修改URL即可,可以加一个查询参数,如./style.css?v=2
Expires
response.setHeader('Expires','Mon, 12 Aug 2019 06:11:29 GMT')
设置时间为某时刻,表示一旦过了该时刻,将会要重新下载。
问题:若用户本地时间错乱,缓存将可能会立即失效。
问:Cache-Control与Expires的区别?
1.Cache-Control是设置时间长度,Expires是设置时间点,推荐使用Cache-Control,因为若客户本地时间一旦错乱,Expires设置缓存可能会受到影响,可能会立即失效。
2.若两个都设置了,会优先使用Cache-Control,因为Cache-Control是新版API。
ETag
var md5 = require('md5') if(path === './main.js'){ let string = fs.readFileSync('./main.js','utf-8') response.setHeader('Content-Type','application/javascript;charset=utf-8') let fileMd5 = md5(string) response.setHeader('ETag',fileMd5) if(request.headers['if-none-match'] === fileMd5){ response.statusCode = 304 //没有响应体 }else{ response.write(string) //有响应体 } }
问:Cache-Control与ETag的区别?
如果用Cache-Control,是直接不请求,ETag会产生请求(Md5相同的情况下),但是不下载,有响应头,但是响应体是空的。推荐使用Cache-Control。