HTTPヘッダーまたは応答本文にエラーメッセージを残しますか?


84

iPhoneおよびAndroidクライアントに公開されているRESTサービスがあります。現在、私はHTTPコード200、400、401、403、404、409、500などに従います。

私の質問は、エラーの理由/説明/原因を置くための推奨される場所はどこですか?このように、REST APIのヘッダーに常にカスタムReasonを含める方が理にかなっていますか?

< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked

それとも、JSONを介して応答本文に含める方が良いですか?

< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }

6
現在、「X-HTTP-Error-Description:Missing requiredparameters」などのカスタムヘッダーを追加するのが一般的な方法です。
andreszs 2017

回答:


96

400.xエラーコードのHTTP仕様からの引用:

4xxクラスのステータスコードは、クライアントがエラーを起こしているように見える場合を対象としています。HEADリクエストに応答する場合を除いて、サーバーには、エラー状況の説明と、それが一時的または永続的な状態であるかどうかを含むエンティティを含める必要があります。これらのステータスコードは、すべてのリクエスト方法に適用できます。ユーザーエージェントは、含まれているエンティティをユーザーに表示する必要があります。

エラーメッセージをHTTP応答の本文にエンティティとして含めることをお勧めします。JSON、プレーンテキスト、フォーマットされたHTML、またはその他の利用したいフォーマットです。


24

本文にエラーの詳細を含めることをお勧めします。さらに、多くの(ほとんど/ほとんどすべて、たとえばWSGI)サーバーとクライアントはエラーコードの名前の変更をサポートしていません-それらを固定ペアとして扱います(たとえば、400は常に「悪いリクエスト」であり「悪いリクエスト」ではありません-あなたユーザーIDの指定を忘れた」)。彼らが壊れなくても、彼らは特定のエラーコードのあなたの特別な名前を気にしません。


3

エラーは本文に属していません。これはWarningヘッダーに属します。

警告の一般的なHTTPヘッダーには、メッセージのステータスで発生する可能性のある問題に関する情報が含まれています。

参照


3
これには「公式」ヘッダーを使用するとよいでしょう。ただし、Warning名前が示すように、はエラー用ではありません。RFC(7234)は、次のように述べています。>エラーステータスコードではなく警告を使用すると、これらの応答が実際の障害と区別されます。
フラン

1
注:Warningヘッダーは間もなく非推奨になります。詳細については、警告(github.com/httpwg/http-core/issues/139)および警告:header&stale-while- revalidategithub.com/whatwg/fetch/issues/913)を参照してください。
ビズマルク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.