前端缓存
强制缓存相关的响应头有哪些?
当前首页不缓存,每次请求首页,强制请求其他资源
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,能够注册对应的data或end事件触发对应的回调函数
可写流是什么?
是写入的目的地
如何解决根路径资源的强制缓存问题?
协商缓存也叫对比缓存,针对根目录index.html文件首页缓存,根据当前的时间,获取最后一次修改时间,设置响应头(res.setHeader('Last-Modified', stat.ctime.toGMTString())),如果修改时间不一样就会重新请求资源
缺点是如果内容没有变化时,它也会重新请求,在1秒内多次更改不会重新请求
解决方案是通过电子标识(指纹)eTag如MD5摘要算法res.setHeader('Etag', crypto.createHash('md5').update('123').digest('base64'))还有拿到上次文件内容摘要哈希req.header['if-modified-since']和req.headers['if-none-match']对比检测内容是否一致,如不一致时响应304
补:
MD5摘要算法的特点有不可逆,根据内容是否向相同,转换长度是否一样,如果内容有一点不一样导致结果差异很大(雪崩效应)
