web-dev-qa-db-ja.com

無効なクエリパラメータに対するHTTP 404と400

これが私のリクエストURLです:

http://server.com/app/user/getuser/?userId=9999

userIdはクエリパラメータであることに注意してください。埋め込みパスパラメータではありません。

リクエストURLが http://server.com/app/user/getuser/9999 で、ID 9999がデータベースに存在しない場合、404を使用する必要があることを理解しています。

しかし、userIdがクエリパラメータである場合にどのHTTPステータスを使用する必要がありますか?現在、404ではなく400を返しています。

9
Loc

404 Not Foundを使用します。

どうして?

RFC 7231400 Bad Requestこのような応答:

400(Bad Request)ステータスコードは、クライアントエラーであると認識されている何か(たとえば、不正なリクエスト構文、無効なリクエストメッセージフレーミング、または不正なリクエストルーティング)のために、サーバーがリクエストを処理できない、または処理しないことを示します。

...リクエストが有効で、存在しないリソースにアクセスしようとしているだけなので、404 Not Foundステータスの方が適していると思います。 RFC 7231 は、次のようにその意味を定義します。

404(見つかりません)ステータスコードは、オリジンサーバーがターゲットリソースの現在の表現を見つけられなかったか、存在することを開示する意思がないことを示します。

7
Ronan Boiteau