前端缓存

强制缓存相关的响应头有哪些?

当前首页不缓存,每次请求首页,强制请求其他资源

  • res.setHeader('Cache-Control', 'max-age=10')

  • res.setHeader('Expires', new Date(Date.now() + 10 * 1000).toGMTString())(老版本支持)

  • res.setHeader('Cache-Control', 'no-store')

类的方式改写一个API请求

HTTP请求报文

  • 响应行:请求方法(POST)、请求URL、协议版本(httpVersion)
  • 响应头
  • 响应体
  • 请求行
  • 请求头
  • 请求体

什么是响应可读流?

代表的是资源的地址,继承emit,能够注册对应的dataend事件触发对应的回调函数

可写流是什么?

是写入的目的地

如何解决根路径资源的强制缓存问题

协商缓存也叫对比缓存,针对根目录index.html文件首页缓存,根据当前的时间,获取最后一次修改时间,设置响应头(res.setHeader('Last-Modified', stat.ctime.toGMTString())),如果修改时间不一样就会重新请求资源

缺点是如果内容没有变化时,它也会重新请求,在1秒内多次更改不会重新请求

解决方案是通过电子标识(指纹)eTagMD5摘要算法res.setHeader('Etag', crypto.createHash('md5').update('123').digest('base64'))还有拿到上次文件内容摘要哈希req.header['if-modified-since']req.headers['if-none-match']对比检测内容是否一致,如不一致时响应304

补:MD5摘要算法的特点有不可逆,根据内容是否向相同,转换长度是否一样,如果内容有一点不一样导致结果差异很大(雪崩效应)