我尝试使用Etag缓存来自api请求的json响应 . 我正在打这样的事情http://localhost:3000/api/config并得到:
Response Headers:
Cache-Control:public,max-age = 31557600
连接:保持活跃
内容长度:11
内容类型:应用/ JSON;字符集= utf-8的
日期:2015年5月13日星期三,格林威治标准时间11:41:52
ETag:"94d52736bcd99b1ac771f13b1bbdf622"
X-已启动方式:快递
Resonse:{id:1}
我希望浏览器缓存响应,并通过“f5”向Etag发送下一个请求triggert . 但事实并非如此 .
Request Headers 2nd request:
接受:text / html,application / xhtml xml,application / xml; q = 0.9,image / webp,/; q = 0.8
Accept-Encoding:gzip,deflate,sdch
接受语言:DE-DE,DE; Q = 0.8,EN-US; Q = 0.6,连接; Q = 0.4
缓存控制:无缓存
连接:保持活跃
主持人:本地主机:3000
附注:无缓存
User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 42.0.2311.135 Safari / 537.36
因此,通过直接api请求缓存纯json响应是不可能的?
或者我会错过什么 .
api是一个使用express完成的节点js测试实现:
router.get('/config', function(req, res) {
var eTag = crypto.createHash('md5').update(JSON.stringify(config)).digest('hex');
res.setHeader('ETag', '"' + eTag + '"');
res.setHeader('Content-Type', 'application/json');
res.setHeader('Cache-Control', 'public, max-age=31557600');
});
使用chrom(42.x)和firefox(37.x)的Testet
谢谢你的回应 .
3 回答
嗨这段代码似乎对我有用:
使用浏览器URL栏调用api http://localhost:3000/api/config
看起来你可能正在使用chrome . Chrome应在“f5”后的请求中包含以下 Headers :
如果您没有看到这一点,请检查chrome settings / General并确保未选中“禁用缓存(当DevTools打开时)”:
使用jQuery我们可以使用ifModified选项: