Node / Express服务映像是否存在; caching问题

一直在使用SO,但这是我的第一个问题,因为我找不到解决这个问题的方法。 我会尝试尽可能的明确,有什么不清楚的,只是让我知道,所以我更新相应的问题。

我正在使用路由来根据在路由中传递的userId作为参数()来提供用户的照片。 它可以工作,但每次遇到标签时,都会从服务器请求图像,并且从不使用caching版本。

我用Cache-Control玩了一下,但是不pipe是全部还是全无:如果启用了caching并且用户改变了他的照片,它仍然会使用旧的照片。

我的问题是:是否有可能使用caching的版本,如果照片没有改变,但如果它确实使用从服务器? 我尝试使用“必须重新validation”以及“最大年龄”或“无caching”无济于事。

如果有帮助,以下是路线代码:

Module.exports.getPhoto = function(req, res) { var mime = require('mime-magic'), memberId = req.params.memberId, imgUrl; path.exists('public/images/memberPhotos/' + memberId, function(exists) { if(exists) { imgUrl = 'public/images/memberPhotos/' + memberId; }else{ imgUrl = 'public/images/memberPhotos/noPhoto.jpg'; } fs.readFile(imgUrl, function(err, img) { mime.fileWrapper(imgUrl, function(err, mimeType) { if(!err) { console.log(mimeType); res.writeHead(200, { 'Content-Type': mimeType, 'Cache-Control': "max-age=" + 43800*60 + ", must-revalidate" }); res.end(img, 'binary'); } }); }); }); }; 

谢谢

你想使用一个ETagIf-None-Match头。 您将需要跟踪服务器上的图像ETags,并且如果传入的If-None-Match与当前的ETag相匹配,则使用304 – Not Modified来响应请求。 否则,你提供的图像,并在标题中包含一个新的ETag。

有关更多详细信息,请参阅http://blog.phyber.com/supporting-cache-controls-in-nodejs