我很好奇什么是“项目不存在”页面最合适的HTTP状态代码。
如果页面本身不存在,我显然会使用404.但是,我的一个页面有一个userid
参数(它是一个“编辑用户”页面),如果没有给定用户的用户用户ID存在我正在显示一个错误页面,但我还想发送一个4xx状态标题(因为“200 OK”并不适合)。
我猜404会好的,因为它“找不到”而不是“找不到文件”,但我想知道这个案例是否有更好的代码。
答案 0 :(得分:98)
使用模糊的HTTP错误代码过于聪明是一个坏主意。浏览器有时会以无益的方式做出反应,使情况模糊不清。坚持使用404。
答案 1 :(得分:31)
404返回代码实际上意味着“未找到资源”,并且适用于已提出请求但未满足的任何实体。因此,它同样适用于页面,页面子部分以及页面上存在具有特定请求的任何项目。
所以404是在这种情况下使用的正确代码。请注意,它不适用于'未找到服务器',这是一种不同的情况,其中发出请求但根本没有回答,而不是回答但没有请求资源。
答案 2 :(得分:10)
答案 3 :(得分:5)
这取决于userid是资源标识符还是其他参数。如果是,那么可以返回404,否则你可能会返回其他代码,如
400 (bad request) ‐ indicates a bad request
或
412 (Precondition Failed) e.g. conflict by performing conditional update
免费InfoQ Explores: REST一书中的更多信息。
答案 4 :(得分:3)
204
:
没有内容。”此代码表示服务器已成功 处理了请求,但不会返回任何内容
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204
答案 5 :(得分:0)
/**
* {@code 422 Unprocessable Entity}.
* @see <a href="https://tools.ietf.org/html/rfc4918#section-11.2">WebDAV</a>
*/
UNPROCESSABLE_ENTITY(422, "Unprocessable Entity")
答案 6 :(得分:0)
由于它是面向用户的页面,因此请始终使用404
。这是人们通常知道的唯一代码。
答案 7 :(得分:0)
如果页面本身不存在,我显然会使用 404。
您所说的有点令人困惑,但我必须假设您正在开发 API 后端。
问题在于,使用 API 端点的人可能会以两种方式混淆:
所以诀窍是,他们如何知道哪个是正确的假设?
嗯,答案很简单。始终尝试将主体附加到您从代码返回的任何错误。服务器自动返回的错误没有正文。所以试着附上一个你可以记录的正文,以便他们可以使用正文的内容来区分代码返回的错误和服务器错误。
但简而言之,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"}
。这样,您始终可以检查您的错误是否返回了正文,并且您知道它是从您的代码中返回的。否则,找不到资源(链接)。