我有一个页面应用程序,在这个应用程序中,所有的路由都是在客户机上使用react-router-dom完成的。
我的应用程序允许一组精确的匹配路线。
对于该集合之外的任何路由,它都将被视为无效,客户端代码将重定向到/404-page路由。
因此,--我在服务器上呈现时也需要这样做.
这就是流程:
您将向我的服务器请求/invalid-route
react-router将呈现一个<Redirect to="/404-page"/>
/404-page
我想我应该设置status = 404。因为那条路没被找到,对吧?
类似于:
// YOU'VE REQUESTED SOME /invalid-route
res.status(404).redirect(ROUTES.NOT_FOUND);但现在你要向我的服务器询问/404-page路线。它实际上将呈现一个404 Page
您为/404-page
我应该使用200 Ok吗?因为我的/404-page是一个有效的、现有的URL,它实际上会呈现某些内容吗?
// NOW YOU ARE REQUESTING MY /404-page
res.status(200).send( // 404 PAGE HTML );这样做对吗?
更新:
我的问题是假设出了什么问题。
当用户请求/invalid-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 );产生了以下结果:
重定向是使用302完成的,尽管我使用的是res.status(404).。
这根本不是故意的。因为没有发出404状态。
因此,我想我们应该用302或301重定向404,并将404发送给/404-page
类似于:
// 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发布于 2020-05-09 18:53:14
我的直觉是404页应该总是返回404状态。如果它附带了一个显示404消息的实际页面,那就没问题了。我认为这是直觉。
这是我对这个请求流的想法:
<Redirect to="/404-page"/> ->客户端G 210
我认为混淆的原因是认为404页是一个现有的资源,在请求时应该返回200。我更喜欢将404页看作是一个较少的页面,而更多的是一个404状态代码,并使用一些可编辑的html来呈现代码。
https://stackoverflow.com/questions/61700068
复制相似问题