当我重新加载使用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/

10-09 21:29