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
重定向。你要么做一件事,要么做另一件事。