2009-10-04 40 views
0

在有关使用Rails进行敏捷Web开发的书中,建议当有人试图访问网站中的某些数据并且记录不再存在时,应该将用户重定向到工作页面并显示消息。未找到记录的重定向?

用户会去/ book/1,但id 1的书不再存在,所以它被重定向到/ books并显示一条消息“该书不存在”。这似乎是一个很好的用户体验,但打破了HTTP协议。它应该是一个临时重定向吗?如果是的话,一个网络爬虫将继续打这个页面。它应该是永久重定向吗?如果是这样,以前的内容应该在那里可用,而事实并非如此。

我认为记录未找到的页面应该发出404错误?我错了吗?在1/1不存在的情况下点击/ book/1会返回404,HTML显示的内容与/ books完全相同,也可能是错误消息。

使用Rails进行敏捷Web开发违反了该选项,因为用户可能会持续点击/ book/1生成404s以查看/ books中可以看到的内容。

您认为如何?

回答

1

如果资源不存在,发送404状态码。这真的很简单。重定向意味着只有URL(暂时)无效,但资源确实存在。

0

如果没有404,搜索引擎无法发现该对象已被删除。所以我认为这是必须的。

+0

是的,这是我的立场,这本书推荐了一些不同的东西。 – Pablo 2009-10-04 15:02:33

0

我认为这里有一个很好的折中,你呈现一个404模板(完成404状态码),提示用户继续/书籍/ /无论。

0

如果记录不再存在,那么您应该使用301状态码“永久重定向”。 301和404之间的区别在于,当资源从未存在和301当资源存在但移动时,应该使用404错误代码。

+0

好吧,如果有人要求阅读ID为1234的评论,但它不在数据库中,我不知道它是否存在,当然如果我重定向到评论列表并不是因为资源现在存在,而是因为这是我能提供的最好的。 – Pablo 2009-11-08 22:27:14

+0

好吧,在你的情况下你可能不会在意,但是在API中使用这种方法的情况下,头文件可以很好地解释调用方实际发生了什么。 – 2009-11-09 22:50:31