用于重定向无效路由的正确状态代码

Posted

技术标签:

【中文标题】用于重定向无效路由的正确状态代码【英文标题】:proper status code for redirecting an invalid route 【发布时间】:2020-12-20 20:31:20 【问题描述】:

我设置了以下路线:

/business //look for a business
/business/biz/:id //look at a specific business

我所做的是,如果有人转到/business/biz,它会重定向到/business。 我的问题是我应该使用什么状态码? 我不认为它是301302,因为它不是永久的移动,也不是临时的,它只是一个不存在的页面,具有一致的重定向到特定页面。

//get /business/biz page
router.get("/biz", (req, res) => 
  res.redirect("/business");
);

我在 Stack Overflow 上查看了不同的问题,但没有找到与我匹配的案例。

【问题讨论】:

你也要改http方式吗? @ManuelSpigolon 你是什么意思?这是一个正常的res.redirect 方法 我看到biz/id,重定向中的id 在哪里? 【参考方案1】:

要在/business 上重定向/business/biz,您应该返回308 Permanent Redirect。 这是***关于状态 308 的引用:

应使用另一个 URI 重复请求和所有未来的请求。 307 和 308 与 302 和 301 的行为平行,但不允许更改 HTTP 方法。因此,例如,将表单提交到永久重定向的资源可能会顺利进行

您还应该检查this answer,解释301308302307 之间的差异,并且写得很好。

【讨论】:

【参考方案2】:

建议仅将301 代码用作GETHEAD 方法的响应,而将308 永久重定向用于POST 方法。

查看全文here

【讨论】:

以上是关于用于重定向无效路由的正确状态代码的主要内容,如果未能解决你的问题,请参考以下文章

正确登录后如何重定向用户?

Angularjs 用户界面路由器。如何重定向到登录页面

用于重定向到 REST api 中的身份验证的适当 HTTP 状态

在 Firebase onAuthStateChanged 填充状态导致再次登录页面之前重定向到私有路由

当用户会话处于活动状态时使用 Laravel 5.7 中的 Auth 重定向到页面的方法

csharp 状态代码重定向的异常处理