http缓存:
- 强缓存200
- 协议缓存304
强缓存
浏览器判断本地缓存没有过期,就直接使用,不需要再发起http请求
1.Cache-Control
参数:
- private: 可以进行缓存
- pubilc: 客户端与服务端都可以进行缓存 ( 对于前端来说 与 private 是一样的
- max-age: 最大缓存时间
- no-cache: 需要进行协议缓存
- no-store: 不进行缓存
2.Expires
http1.0时代的api
如果设置了cache-control: max-age 则不会生效
值为一个过期日期,该日期为本地时间
协议缓存
是服务端告诉浏览器文件没有发生变化,让浏览器使用本地缓存
1.E-tag
由服务端将js文件打上一个指纹(md5。
第二次请求时,将上一次的指纹放入 if-None-Match 中, 如果两值保持一致,说明不需要重新下载文件,则返回304.
const fileMd5 = md5(fs.readFileSync('文件路径'))
response.setHeader('ETag',FileMd5)
if(request.headers['if-none-match'] === fileMd5){
response.statusCode = 304
} else {
response.write()
}
response.end()
2.Last-Modified / If-Modified-Since
Last-Modified
写入资源最后修改时间
If-Modified-Since
二次请求时,该字段显示上次请求最后的文件的修改时间
如果 Last-Modified 等于 If-Modified-Since ,则说明不需要修改,返回304
const date = new Date()
response.setHeader('LastModified', date )
if(request.headers['if-modified-since'] === date ){
response.statusCode = 304
} else {
response.write()
}
response.end()