我很好奇“项目不存在”页面最合适的 HTTP 状态代码是什么。
如果页面本身不存在,我显然会使用 404。但是,我的其中一个页面有一个
userid
参数(它是一个“编辑用户”页面),如果不存在具有给定用户 ID 的用户,我会正在显示错误页面,但我还想发送 4xx 状态标头(因为“200 OK”不太合适)。
我想 404 应该没问题,因为它是“未找到”而不是“未找到文件”,但我想知道是否有更好的代码来处理这种情况。
过于聪明地使用晦涩难懂的 HTTP 错误代码是一个坏主意。浏览器有时会以无益的方式做出反应,从而使情况变得混乱。坚持使用 404。
404 返回代码实际上意味着“找不到资源”,适用于已发出请求但未得到满足的任何实体。因此,它对于页面、页面的子部分以及页面上存在的任何具有要呈现的特定请求的项目同样有效。
因此 404 是在这种情况下使用的正确代码。请注意,它不适用于“找不到服务器”,这是一种不同的情况,即发出请求但根本没有得到答复,而不是得到答复但没有请求的资源。
400 (bad request) ‐ indicates a bad request
412 (Precondition Failed) e.g. conflict by performing conditional update
免费获取更多信息 InfoQ Explores: REST 书籍。
204
是找不到该项目时的适当解决方案:
状态代码:
404
状态代码自动在请求的API出现时出现 不可用。通向 404 页面的链接通常称为“已损坏” 或死链接,并且可能会受到链接腐烂的影响。 204
204
未找到项目时应显示状态代码,这意味着您的请求处理成功
且未找到内容。
问题在于,无论谁使用 API 端点,都可能会在以下两种方面感到困惑:你所说的有点令人困惑,但我不得不假设你正在开发一个 API 后端。
他们可能认为返回的
404但简而言之,
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")
对于 api 请求,请使用 400 以及错误消息“不存在这样的用户”或类似的内容。