在重定向之前为丢失的资源传递正确的 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 这样用户就知道下一步该做什么 ;)
这是一个理论问题。假设我有一个 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 这样用户就知道下一步该做什么 ;)