「アイテムが見つかりません」エラーページに最も適切なHTTPステータスコードは何ですか


117

「アイテムが存在しない」ページに最も適したHTTPステータスコードは何ですか。

ページ自体が存在しない場合は、明らかに404を使用します。ただし、私のページの1つにuserid引数(「ユーザーの編集」ページ)があり、指定されたユーザーIDのユーザーが存在しない場合は、エラーページですが、4xxステータスヘッダーも送信します(「200 OK」は実際には適合しないため)。

404は「見つかりません」でも「ファイルが見つかりません」でもないので大丈夫だと思いますが、このケースに適したコードがあるかどうか疑問に思います。

回答:


139

あいまいなHTTPエラーコードで過度に巧妙になることは悪い考えです。ブラウザーは状況をわかりにくくする、役に立たない方法で反応することがあります。404に固執する。


14
ない404に良いアドバイス:( OCDを与えるためにあなたをくそすべてのものが本物であるけれども。
キャリーケンドール

16
404エラーは、不正なURIとエンティティが見つからないことを区別するのに多少あいまいです。404を明確にするために、新しい標準コードが必要です。
Breakskater

2
あいまいなステータスコードを返すよりも、204の空のコンテンツを返す方がいい
hsnslh

46

404戻りコードは実際には「リソースが見つかりません」を意味し、要求が行われたが満たされていないエンティティに適用されます。そのため、ページ、ページのサブセクション、およびレンダリングされる特定のリクエストがあるページに存在するアイテムに対しても同じように機能します。

したがって、404はこのシナリオで使用する適切なコードです。これ「サーバーが見つかりません」に適用されないことに注意してください。これは、要求は出されたがまったく応答されなかった場合とは異なり、応答されたがリソースが要求されなかった場合とは異なります。


1
id = 1でfooオブジェクトを更新したいが、このidを持つデータベースにfooがない場合はどうなりますか?
バリホン2018年

1
このシナリオでは、修正する同時実行性の問題があります。id= 1のオブジェクトを取得し、それを更新しようとしたときに存在しなくなった場合、他のスレッドまたはプロセスがロックを無視しました(またはロックを設定していません)。それを削除しました。それは良いことではありません。または、最初に存在を確認せずにオブジェクトid = n(nは指定されている)を更新しようとすると、更新ロジックに検証ステップがないため、これも適切ではありません。
Eight-Bit Guru


8

これは、useridがリソースIDか追加のパラメーターかによって異なります。そうであれば、404を返しても問題ありません。

400 (bad request) ‐ indicates a bad request
または
412 (Precondition Failed) e.g. conflict by performing conditional update

詳細については、無料のInfoQ Explores:RESTブックをご覧ください。


1
「追加パラメーター」とは、リクエストヘッダーフィールドを意味しますか?それ以外の場合は、412の使用はお勧めしません。「412(前提条件が失敗しました)ステータスコードは、サーバーでテストしたときに、要求ヘッダーフィールドで指定された1つ以上の条件がfalseと評価されたことを示しています。」
oferei
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.