我的Node.js应用程序使用Express,我的应用程序有一个发送带有Tweet数据的JSON文件的路由。我希望它缓存20秒。但是,每当我在浏览器(Chrome或FireFox)中点击刷新时,我立即获得新数据(即使我每秒都这样做)。请注意,数据确实每20秒更改一次,但我仍然需要20秒的缓存。
这是我的路线。
app.get('/tweet-stats.json', function(req, res) {
res.set('Cache-Control', 'public, max-age=20');
res.set('Expires', new Date(Date.now() + 20000));
res.set('Last-Modified', new Date(Date.now()));
res.set('Content-Type', 'application/json');
res.send(publicTweetStatus());
});
以下是FireFox(FireBug)的请求和响应标头:
Response Headers
HTTP/1.1 200 OK
X-Powered-By: Express
Cache-Control: public, max-age=20
Expires: Fri May 10 2013 06:52:11 GMT+0000 (UTC)
Last-Modified: Fri May 10 2013 06:51:51 GMT+0000 (UTC)
Content-Type: application/json
Content-Length: 209
Connection: keep-alive
Request Headers
GET /tweet-stats.json HTTP/1.1
Host: mydevelopmenturl.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
如何在再次检查服务器之前让浏览器缓存20秒?
更新
所以,我尝试了robertklep的建议,它在某些浏览器/操作系统中起作用,而不是在其他浏览器/操作系统中起作用:
Ubuntu Chrome - 没有缓存!!!!!!!!!!!!
Ubuntu FireFox - 没有缓存!!!!!!!!!!!!!!!
Windows 7 - Chrome - 缓存
Windows 7 - FireFox - 缓存
Windows 7 - IE 9 - 缓存
Windows 7 - Opera - No Cache !!!!!!!!!!!!!!!!!
iOS Safari - 缓存
Mac OSX - Safari - 缓存
Mac OSX - Chrome - 缓存
Mac OSX - Firefox - 缓存
为什么会出现差异?