在我的node.js应用程序(带有Express)中,我有一个最终的else条件,可以捕获未知路径并使用名为“ 404.html”的文件进行响应:
else if(req.url !== '/json' && req.url !== '/version' && req.url !== "/json/version"){
res.status(404).send('<script>location.href = "/404.html";</script>');
}
例如,如果有人尝试访问无效的路径www.myApp.com/aaldkfjd
或www.myApp.com/aaldkfjd/jkjadklfja/dkjfakj
,则此方法很好,它们无效,因此它将进入else并发送“ 404.html”文件。
但是在检查客户端中的服务器响应时,我注意到它是304而不是404。
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html">
<title>My Awesome 404 page</title>
<link rel="stylesheet" type="text/css" media="all" href="/css/styles.css"/>
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon.ico">
</head>
<body style="text-align:center;">
<div id="loginDiv">
<h1 id="loginHeader">404...We don't know that route!</h1>
</div>
<img src="images/myImageMedium.png" alt="404 image">
</body>
</html>
答案 0 :(得分:2)
浏览器获得404状态并加载404错误页面。
错误页面包含JavaScript,JavaScript会导致浏览器离开404页面并导航到新页面。
该页面的状态为304。
当您输出404错误并且不重定向客户端时,您应该提供实际的404消息。
答案 1 :(得分:1)
您的服务器正在发送一个脚本,该脚本重定向到404页面,即304状态。
此处的最佳做法是让节点自己发送“我的真棒404页面”。
所以:
res.status(404).sendFile('public/404.html')
答案 2 :(得分:-3)
您可以在下面尝试以下代码。
else if(req.url !== '/json' && req.url !== '/version' && req.url !== "/json/version"){
res.write('<script>location.href = "/404.html";</script>'); res.status(404).end();
}