“未找到项目”错误页面最合适的 HTTP 状态代码是什么

问题描述 投票:0回答:9

我很好奇“项目不存在”页面最合适的 HTTP 状态代码是什么。

如果页面本身不存在,我显然会使用 404。但是,我的其中一个页面有一个

userid
参数(它是一个“编辑用户”页面),如果不存在具有给定用户 ID 的用户,我会正在显示错误页面,但我还想发送 4xx 状态标头(因为“200 OK”不太合适)。

我想 404 应该没问题,因为它是“未找到”而不是“未找到文件”,但我想知道是否有更好的代码来处理这种情况。

rest http https http-status-codes
9个回答
210
投票

过于聪明地使用晦涩难懂的 HTTP 错误代码是一个坏主意。浏览器有时会以无益的方式做出反应,从而使情况变得混乱。坚持使用 404。


68
投票

404 返回代码实际上意味着“找不到资源”,适用于已发出请求但未得到满足的任何实体。因此,它对于页面、页面的子部分以及页面上存在的任何具有要呈现的特定请求的项目同样有效。

因此 404 是在这种情况下使用的正确代码。请注意,它不适用于“找不到服务器”,这是一种不同的情况,即发出请求但根本没有得到答复,而不是得到答复但没有请求的资源。


36
投票

204


没有内容。”这段代码表示服务器已经成功 处理了请求,但不会返回任何内容

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204


24
投票
404 就可以了。

RFC9110 中的 HTTP 状态代码定义


13
投票
这取决于 userid 是资源标识符还是附加参数。如果是,那么返回 404 就可以了,如果不是,您可能会返回其他代码,例如

400 (bad request) ‐ indicates a bad request



412 (Precondition Failed) e.g. conflict by performing conditional update


免费获取更多信息

InfoQ Explores: REST 书籍。


8
投票

204

 是找不到该项目时的适当解决方案:

404 状态代码:

404

状态代码
自动在请求的API出现时出现 不可用。通向 404 页面的链接通常称为“已损坏” 或链接,并且可能会受到链接腐烂的影响。

204
状态代码:

204
未找到项目时应显示状态代码,这意味着您的请求

处理成功

未找到内容


5
投票

你所说的有点令人困惑,但我不得不假设你正在开发一个 API 后端。

问题在于,无论谁使用 API 端点,都可能会在以下两种方面感到困惑:

他们可能认为返回的

404
    是因为未到达端点(资源),或者
  1. 他们可能认为未找到所请求的项目或用户。
  2. 所以关键是,他们如何知道哪个是正确的假设?
答案很简单。始终尝试将正文附加到从代码返回的任何错误。服务器自动返回的错误没有正文。因此,请尝试附加一个可以记录的正文,以便他们能够使用正文的内容来区分代码返回的错误和服务器错误。

但简而言之,

404

是返回的正确状态,但请尝试为其附加一个正文,以表明为什么返回

404 一个例子可以是:

// For illustration I'm just gonna use C# Return NotFound(new { errorMessage: "Item requested was not found" });

这里,
NotFound
返回一个

404

状态码,参数是一个像
{ errorMessage: "some reason for the error"}。这样,您可以随时检查错误是否返回正文,并且您知道它是从代码返回的。否则,找不到资源(链接)。

/** * {@code 422 Unprocessable Entity}. * @see <a href="https://tools.ietf.org/html/rfc4918#section-11.2">WebDAV</a> */ UNPROCESSABLE_ENTITY(422, "Unprocessable Entity")

1
投票
由于它是面向用户的页面,因此始终使用 

1
投票
。这是人们通常知道的唯一代码。

对于 api 请求,请使用 400 以及错误消息“不存在这样的用户”或类似的内容。

© www.soinside.com 2019 - 2024. All rights reserved.