【问题标题】:Passing the correct HTTP status code for a missing resource, before redirecting在重定向之前为丢失的资源传递正确的 HTTP 状态代码
【发布时间】:2015-07-13 04:19:20
【问题描述】:

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

mypage.com/users/1

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

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

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

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

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

您对此问题有何经验?

【问题讨论】:

标签: php redirect laravel http-headers


【解决方案1】:

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

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

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

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

example.com/usr/lukasgeiter

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

此外,用户更清楚以这种方式发生了什么。显然,您可以在错误页面上放置一个指向主页的大链接,以便用户知道下一步该做什么;)

【讨论】:

  • 这是有道理的。用户体验评论也很到位。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2020-04-24
  • 2022-11-03
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多