12

同様の質問がここに掲載されています。たとえば、URIは、ISO-8601の日付を持っていることになって、あなたはそれが間違った形式でだか2月を参照していることを発見した場合What's an appropriate HTTP status code to return by a REST API service for a validation failure?ユーザーが間違ったユーザー名/パスワードで正しい形式でログインしようとすると、適切なHTTPステータスコードが返されますか?

状態上記のスレッドで答え」という31番目の場合、HTTP 400を返すでしょう。エンティティ本体に整形式のXMLがあり、それを解析することができないとすれば、同上です。

ただし、ユーザーが正しくフォーマットされたデータを送信した場合はどうなりますか?これは、ユーザがユーザ名とパスワード(私のアプリケーションでは完全に有効)の平易なアルファベットの文字列/テキストを提出したことを意味します。唯一の問題は、パスワードがユーザー名と一致しなかったことです。この場合、完全に有効な構文で整形式なので、400は正しくありません。

ユーザーが任意のページにアクセスしようとしていないため、A 401が正しく表示されない(ここで示唆されているように:Which HTTP status code to say username or password were incorrect?)、単にログインしようとしていて、一致しないデータを入力しています。

私がリンクしている最初の投稿を振り返ってみると、2番目の回答には422が正しい応答であると書かれていますが、私はDjango Rest Frameworkを使用しています。 DRFの一部であるステータスコードの一覧はhttp://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xxです。

404データは正常に受け入れられ、拒否されないため、正しく表示されません。

これで、使用すべき実際の正しい応答は何ですか?

答えて

14

正しいHTTPコードが実際the RFCから401であろう:

401(不正な)ステータスコードが示しますターゲットリソースの有効な認証資格情報がないために要求が適用されていないことを確認します。 401レスポンスを生成するサーバは、ターゲットリソースに適用可能な少なくとも1つのチャレンジを含むWWW-Authenticateヘッダフィールド(4.1節)を送信しなければならない(MUST)。

要求に認証資格情報が含まれている場合、401応答は、その資格情報に対して許可が拒否されたことを示します。ユーザエージェントは、新しいか置換されたAuthorizationヘッダフィールド(4.2節)で要求を繰り返すことができる(MAY)。

+0

そうです、401は私が使用しているものです。うわー、私は説明の2番目の部分を見逃したと信じることはできません。ありがとう。私はこの質問に8分で正しいとマークしてくれます。 – user2719875

+2

標準が虚偽で、私は418が依然として最高の応答であると考えています – sjagr

+0

あなたが引用している部分から、401の応答は要求が**適用されていないことを示します**。したがって、最初に下位レベルで承認が必要なため、ログイン**試行**は行われませんでした。これは、通常、複数のセキュリティ層がネストされている場合に発生し、内部層で認証を試みる前に外部層で認証する必要があることを示す有効な応答です。 – spectras

関連する問題