Lorsque je recharge un site web réalisé avec express, j'obtiens une page blanche avec Safari (pas avec Chrome) car le serveur NodeJS m'envoie un code d'état 304.
Comment résoudre ce problème ?
Bien sûr, cela pourrait aussi être un problème de Safari, mais en fait, cela fonctionne bien sur tous les autres sites web, donc cela doit être un problème sur mon serveur NodeJS, aussi.
Pour générer les pages, j'utilise Jade avec res.render
.
Mise à jour : Il semble que ce problème survienne parce que Safari envoie 'cache-control': 'max-age=0'
lors du rechargement.
Mise à jour 2 : J'ai maintenant une solution de contournement, mais existe-t-il une meilleure solution ? Solution de rechange :
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…
}
Mise à jour 3 : Donc la partie complète du code est actuellement :
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);
}
}
4 votes
La 304 n'est pas un problème. Cela signifie simplement que votre réponse n'est pas modifiée et que votre navigateur se tourne vers le cache pour récupérer la ressource. Pouvez-vous poster le code pertinent dans lequel l'anomalie se produit.
3 votes
Oui, en fait il n'est pas modifié, mais Safari vide son cache sur CMD + R (reload) et le serveur dit seulement qu'il n'a pas changé.
0 votes
Comment la page blanche est-elle liée au code d'état 304 ? Node enverrait également 304 à d'autres navigateurs.
3 votes
C'est lié au fait qu'avec la norme 304, le corps n'est pas envoyé et le navigateur utilise son cache, mais comme il n'y a pas de cache, vous obtenez une page blanche.
0 votes
La mise à jour 2 avec des en-têtes définis manuellement pour désactiver la mise en cache a permis de résoudre le problème.
0 votes
Nous avons créé ceci pour aider à le contourner : github.com/Dakuan/jumanji
1 votes
@AkshatJiwanSharma Tout programme est développé pour répondre exactement au contrat du propriétaire du produit. Le propriétaire du produit est celui qui possède le code et paie l'argent, pas une organisation qui écrit des articles dont personne ne se soucie. Si le contrat dit "200", alors absolument tout état qui n'est pas égal à "200" est un bug. Lorsqu'il y a un bogue, je DOIS réécrire le code jusqu'à ce que tout soit exactement comme prévu. Le W3C n'a pas son mot à dire en la matière.