h34*_*4cr 78 safari caching node.js http-status-code-304 express
当我重新加载使用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…
}
Run Code Online (Sandbox Code Playgroud)
更新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);
}
}
Run Code Online (Sandbox Code Playgroud)
ble*_*ted 82
最简单的解决方案
app.disable('etag');
Run Code Online (Sandbox Code Playgroud)
如果您想要更多控制,可以在此处替代解决方案:
尝试在 Safari 中使用隐私浏览或删除整个缓存/cookie。
当浏览器认为其缓存中有该网站但实际上没有时,我在使用 Chrome 时遇到了一些类似的问题。
http 请求中使服务器响应 304 的部分是 etag。似乎 Safari 正在发送正确的 etag,但没有相应的缓存。
| 归档时间: |
|
| 查看次数: |
81205 次 |
| 最近记录: |