10

我有一个网站,主要显示内容的分页列表(文章、数据元素等),我想知道当用户在可用列表范围之外导航时返回 HTTP 404(例如,通过手动编辑的 url)。

有些网站只显示“没有结果/页码超出范围”,有些网站还额外返回 HTTP 404 状态。

你对此有何看法,为什么?

更新

它不是和 api 响应。这个问题是关于用户查看的页面,其中包括在主要区域中显示列表/表格。

更新

边界示例:第 1 页是超出范围的页面,因为显示列表的数据尚不存在。

我应该显示 404 吗?如果它在哪里搜索结果我不会介意......但是对于分页列表/数据表的普通查看似乎很苛刻。

示例: Stack Overflow 运行的第一天,还没有任何问题,你点击主页,什么,404 或只是 200 和“还没有问题”消息?

4

6 回答 6

8

我会说这绝对是 404 的情况。这是对不存在的资源的请求。用于显示项目的通用页面/脚本是否无关紧要。

于 2010-03-31T14:20:02.023 回答
4

当页码为 != 1 时,我会选择404 ,无论页码放在 URI 中的哪个位置(查询字符串或路径中),当没有结果但页码是否为 1 时,我会选择软 404给定

为什么?

结果集第 1 页作为结果集的登录页面存在(甚至搜索结果 - 参见 Google 此处),因此找到并存在(如果不是用于显示结果集)告诉您结果集中没有数据.

然后找不到结果集范围之外的任何结果集页码,这些页面/资源的存在没有意义,因此是 404。如果有人争辩说它们的存在是为了传达“没有更多数据”的消息,因此它们是有意义的,因此需要被索引 - 搜索引擎的噩梦!

HTTP 400 Bad Request是错误的选择,因为它表明请求永远不会正确。

HTTP 400 错误请求 - 由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求

404 Not Found对这种情况很模糊,在这种情况下,IMO 可以双向解释

服务器未找到任何与请求 URI 匹配的内容。没有说明这种情况是暂时的还是永久性的。如果服务器通过一些内部可配置的机制知道旧资源永久不可用并且没有转发地址,则应该使用 410 (Gone) 状态代码。当服务器不希望确切地揭示请求被拒绝的原因或没有其他响应适用时,通常使用此状态代码。

于 2010-03-31T18:52:30.537 回答
2

是的,如果它是一个 API,因为 4xx 错误表示暂时缺乏资源,这可能会在以后出现。如果它不是 API,我建议任何 404 页面对用户更友好一些(例如http://www.didcot.com/forum/?read=1234567)。

于 2010-03-31T14:05:46.830 回答
1

-- 当用户在可用列表范围之外导航时。

您不应提供超出范围的链接。在结果的最后一页中,不要显示“下一页”链接。好吧,我猜你没有这样做。但是其他人可以链接到您的超出范围的页面,这给我们带来了有趣的问题:

如前所述,应为不存在的资源返回 404。真正的问题是:“什么是资源?”

我会说,如果结果的数量经常变化(例如每天)并且也可能减少(因此结果页面 #9 今天可能存在但明天不一定存在),则列表/搜索功能作为一个整体构成资源,而不是单个结果页面,它仅表示资源的特定状态。

相反,如果结果的数量只能增加,即列出的对象不是可变的而是永久的,则为超出范围的页面显示 404 是有意义的,因为现有的结果页面更像是一种资源,即文档意味着留在这。

一般来说,我认为没有通用的答案,但决定权在于站长,因为没有足够清晰的规范存在。应该记住,状态码主要是为无法理解页面内容的非人类客户(机器人、搜索引擎)返回的,因此实际上这主要是 SEO 问题。

顺便提一下,超出范围的结果页面被 Google 赋予状态 200:(并不是说 Google 是神。)

$ curl -s --head -A 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; fi-fi) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10' 'http://www.google.com/search?q=stackoverflow&start=1000' | grep ^HTTP
HTTP/1.1 200 OK
于 2010-03-31T21:25:36.800 回答
0

如果是您的查询字符串告诉返回哪个页面,则 404 可能不合适。如果它不在您的查询字符串中,则该文档不存在并且 404 绝对合适。

于 2010-03-31T15:00:32.020 回答
-1

好吧,我不会返回 404,因为通常会找到该页面(例如display.php ?page=62)。

在我看来,最好的解决方案是告诉用户“页码超出范围/不可用”以及指向最后一个现有页面的链接或 history.back() 链接。

HTTP Code 400 可能是您正在寻找的东西。

于 2010-03-31T14:08:24.407 回答