在重定向之前为丢失的资源传递正确的 HTTP 状态代码

Passing the correct HTTP status code for a missing resource, before redirecting

这是一个理论问题。假设我有一个 public 用户个人资料页面:

我的页面。com/users/1

在访问路由/users/{id}之前,我检查用户(so,资源)是否存在。如果没有,我重定向到主页:

$user = User::find($id);

if (!isset($user)) {
    return Redirect::to('/');
}

现在,当用户不存在时,Chrome 开发工具 returns 302 Found 状态的网络选项卡,然后重定向到主页。

这是要设置的正确状态吗?如果不是,我应该将哪种代码传递给重定向以提供缺少资源的信息?我不认为它应该是 404,因为路由本身可能是正确的(如 /users/12242343534657),所以 - 从技术上讲 - 该页面可能存在。这只是请求的数据 - 不是。

您对这个问题有何经验?

所有重定向都必须使用 3xx 状态代码。 Here's a list of them

在你的情况下可能是 302(或 301,但这将被浏览器永久缓存,这可能会成为一个问题)

但是,你真的应该重定向到主页吗?我认为不。当然这只是我的意见,但显示 404 页面确实是很常见的做法。 (这不仅代表路线错误,而且通常 未找到

在某些情况下,重定向会损害用户体验。假设您手动输入了您网站的地址,例如:

example.com/usr/lukasgeiter

您可能已经注意到,我 user 写错了。使用重定向,我必须再次输入所有内容。如果您留在网站上并显示错误消息,我可以更正我的拼写错误并加载正确的页面。

此外,用户更清楚那样发生了什么。显然你可以在错误页面的主页上放一个大 link 这样用户就知道下一步该做什么 ;)