【发布时间】:2020-08-25 05:52:35
【问题描述】:
我有一个单页应用程序,其中所有路由都在客户端上完成,使用 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 - 我的服务器会为你呈现一个 404 页面。
- 我应该为 404 页面使用哪个状态码?
我应该使用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 );
产生了以下结果:
[![在此处输入图片描述][1]][1]
重定向是使用302 完成的,即使我使用的是res.status(404).。
这根本不是故意的。因为没有发出404 状态。
所以我想我们应该用302 或301 重定向/invalid-route,并为/404-page 发送404
类似:
// 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
【问题讨论】:
标签: node.js express http http-status-code-404 server-side-rendering