在Node.js中,将状态设置为404会以304代替

时间:2018-11-09 15:49:30

标签: javascript node.js express

在我的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/aaldkfjdwww.myApp.com/aaldkfjd/jkjadklfja/dkjfakj,则此方法很好,它们无效,因此它将进入else并发送“ 404.html”文件。

但是在检查客户端中的服务器响应时,我注意到它是304而不是404。

enter image description here

<!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>

3 个答案:

答案 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();
}