当我重新加载使用express创建的网站时,由于Safari(而不是Chrome),我得到了一个空白页面,因为NodeJS服务器向我发送了304状态代码。
该如何解决?
当然,这也可能只是Safari的问题,但实际上它可以在所有其他网站上正常工作,因此它也必须是我的NodeJS服务器上的问题。
为了生成页面,我将Jade与res.render
结合使用。
更新:似乎发生此问题,因为Safari在重新加载时发送了'cache-control': 'max-age=0'
。
更新2:我现在有一个解决方法,但是有更好的解决方案吗?
解决方法:
app.get('/:language(' + content.languageSelector + ')/:page', function (req, res)
{
// Disable caching for content files
res.header("Cache-Control", "no-cache, no-store, must-revalidate");
res.header("Pragma", "no-cache");
res.header("Expires", 0);
// rendering stuff here…
}
更新3:
因此,完整的代码部分当前为:
app.get('/:language(' + content.languageSelector + ')/:page', pageHandle);
function pageHandle (req, res)
{
var language = req.params.language;
var thisPage = content.getPage(req.params.page, language);
if (thisPage)
{
// Disable caching for content files
res.header("Cache-Control", "no-cache, no-store, must-revalidate");
res.header("Pragma", "no-cache");
res.header("Expires", 0);
res.render(thisPage.file + '_' + language, {
thisPage : thisPage,
language: language,
languages: content.languages,
navigation: content.navigation,
footerNavigation: content.footerNavigation,
currentYear: new Date().getFullYear()
});
}
else
{
error404Handling(req, res);
}
}
最佳答案
最简单的解决方案:
app.disable('etag');
如果您需要更多控制权,请在此处使用替代解决方案:
http://vlasenko.org/2011/10/12/expressconnect-static-set-last-modified-to-now-to-avoid-304-not-modified/
关于node.js - NodeJS/表达: Cache and 304 status code,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18811286/