web-dev-qa-db-ja.com

HTTP 406および415エラーコード

Jsonのみを受け入れ、jsonのみを出力するWebサービスを作成しています。

したがって、他の形式が要求された場合、適切なステータスコードを返す必要があります。

私には2つの選択肢があるようです:

  1. 406-受け入れられない
  2. 415-サポートされていないメディアタイプ

誰かが2つのコードのセマンティクスについて私を啓発できれば素晴らしいと思います。

61
rmk

406は、リクエストヘッダーの受け入れに基づいて応答できない場合にサーバーから返されます(つまり、のみ XMLが必要であることを示すAcceptヘッダーがあります)。

415は、リクエストで送信されたエンティティ(POSTまたはPUT)のコンテンツ)にサポートされていないメディアタイプがある(つまり、XMLを送信した)ときにサーバーから返されます。

だから.. 406欲しいものを送信できないとき、415欲しいものを送信できないとき。

お役に立てば幸いです!

122
nathan
  • 406 Acceptヘッダーが送信された場合、フルフィルできません。
  • 415 Content-Typeは送信できますが、使用できません。
37
Wrikken

RFC2616 を引用するには:

406受け入れられません

要求によって識別されたリソースは、要求で送信された受け入れヘッダーに従って受け入れられないコンテンツ特性を持つ応答エンティティを生成することができるだけです。

クライアントがサービスを照会するとき、送信したAccept*ヘッダーを確認してください。 application/json(または*/*などのワイルドカード)と一致しない場合は、これを返します。応答には、「ここでJSONのみを提供する」と示されている必要があります。

415サポートされていないメディアタイプ

要求のエンティティが、要求されたメソッドの要求されたリソースでサポートされていない形式であるため、サーバーは要求の処理を拒否しています。

415 Unsupported Media Typeを返すだけで、「クライアントはJSONではない何かを送信したため、それを処理できません」の最小応答になります。 「JSONを送信する必要がある」ことを示すヘッダーがあるかどうかわからない

7
Piskvor

クライアントがAcceptヘッダーを使用して、サポートされていないコンテンツタイプ(この場合はJSON以外)で応答を要求する場合、406が使用されます。一方、415は、クライアントがサポートされていないコンテンツタイプのデータをPOSTまたはPUTするときに使用されます。

簡単に言うと、期待される形式で出力できない場合は406を使用し、入力形式をサポートしていない場合は415を使用します。

定義については、RFC 2616を参照してください: 406 および 415

4
Victor Welling