Node.js 我应该使用什么HTTP状态发送404页面?

Node.js 我应该使用什么HTTP状态发送404页面?,node.js,express,http,http-status-code-404,server-side-rendering,Node.js,Express,Http,Http Status Code 404,Server Side Rendering,我有一个单页应用程序,其中所有路由都在客户端上完成,使用react router dom 我的应用程序允许一组精确的匹配路线 对于超出该集合的任何路由,它将被视为无效,并且客户端代码将重定向到/404页面路由 因此,在服务器上进行渲染时,我需要执行相同的操作。 这就是流程: 您将向我的服务器请求/无效路由 react路由器中的我的代码将呈现 我需要将您的请求重定向到/404页 我应该使用什么代码进行重定向 我想我应该设置status=404。因为没有找到那条路线,对吗 比如: // YOU'

我有一个单页应用程序,其中所有路由都在客户端上完成,使用
react router dom

我的应用程序允许一组精确的匹配路线

对于超出该集合的任何路由,它将被视为无效,并且客户端代码将重定向到
/404页面
路由

因此,在服务器上进行渲染时,我需要执行相同的操作。

这就是流程:

  • 您将向我的服务器请求
    /无效路由
  • react路由器中的我的代码将呈现
  • 我需要将您的请求重定向到
    /404页
  • 我应该使用什么代码进行重定向
我想我应该设置
status=404
。因为没有找到那条路线,对吗

比如:

// YOU'VE REQUESTED SOME /invalid-route

res.status(404).redirect(ROUTES.NOT_FOUND);
// YOU'VE REQUESTED SOME /invalid-route

res.status(302).redirect(ROUTES.NOT_FOUND);

// NOW YOU ARE REQUESTING MY /404-page

res.status(404).send( // 404 PAGE HTML );
但是现在你要向我的服务器请求
/404页面
路由。这将实际呈现一个
404页面

  • 你要的是
    /404页
  • 我的服务器将为您呈现404页面
  • 404页面应该使用哪种状态代码
我应该使用
200 Ok
?因为我的
/404页面
是一个有效的现有URL,它实际上会呈现一些东西

// NOW YOU ARE REQUESTING MY /404-page

res.status(200).send( // 404 PAGE HTML );
这样做对吗


更新:

我的问题是假设出了什么问题

当用户请求
/无效url
时,您不能同时发送
404
和重定向

因为以下代码:

// YOU'VE REQUESTED SOME /invalid-route

res.status(404).redirect(ROUTES.NOT_FOUND);

// NOW YOU ARE REQUESTING MY /404-page

res.status(200).send( // 404 PAGE HTML );
产生了以下结果:

[![在此处输入图像描述][1][1]

重定向是使用
302
完成的,尽管我使用的是
res.status(404)。

这根本不是有意的。因为没有发出
404
状态

所以我想我们应该用
302
301
重定向
/invalid route
,并将
404
发送到
/404页面

比如:

// YOU'VE REQUESTED SOME /invalid-route

res.status(404).redirect(ROUTES.NOT_FOUND);
// YOU'VE REQUESTED SOME /invalid-route

res.status(302).redirect(ROUTES.NOT_FOUND);

// NOW YOU ARE REQUESTING MY /404-page

res.status(404).send( // 404 PAGE HTML );

更新2:

这与发送
301

// THIS SENDS A 302, EVEN THOUGH SETTING 301

res.status(301).redirect(ROUTES.NOT_FOUND);
要在重定向时发送301,我必须执行以下操作:

// THIS SYNTAX ALLOWS YOU TO CHOOSE THE STATUS CODE FOR THE REDIRECT

res.redirect(301,ROUTES.NOT_FOUND);
``´


  [1]: https://i.stack.imgur.com/jNnfN.png

我的直觉是404页面应该总是返回404状态。如果它附带了一个显示404消息的实际页面,那么就可以了。我认为这是直觉

这是我对该请求流的想象:

  • 客户端获取/无效路由->服务器
  • 服务器404
    ->客户端
  • 客户端获取/404页面->服务器
  • 服务器404/404页面->客户端

  • 我认为这种混乱来自于将404页面看作一个现有资源,当请求时应该返回200。我更喜欢将404页面看作是一个页面,而更多的是一个404状态代码,带有一些可编辑的html来呈现代码。

    是的,我不知道我是否想得太多了。但不管怎样,感觉都很奇怪。对于实际存在的页面返回404,即使它是404页面,也似乎不正确。我已经用更多细节更新了我的问题。似乎您无法在同一响应中使用
    404
    重定向。你要么做一件事,要么做另一件事。