在重定向之前,为缺少的资源传递正确的HTTP状态代码

时间:2015-05-03 20:23:29

标签: php redirect laravel http-headers

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

mypage.com/users/1

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

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

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

现在,当用户不存在时,Chrome开发者工具的网络标签会返回302 Found状态,然后会重定向到主页。

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

您对此问题的体验是什么?

1 个答案:

答案 0 :(得分:1)

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

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

但是,你真的应该重定向到主页吗?我认为没有。当然这只是我的观点,但显示404页面是非常常见的做法。 (这并不代表错误的路线,但未找到

有些情况下,重定向会损害用户体验。想象一下,您手动输入了网站的地址,如:

example.com/usr/lukasgeiter

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

对于用户来说,这样做会更加清楚。显然,您可以在错误页面上放置一个很大的主页链接,以便用户知道下一步该做什么;)