web-dev-qa-db-ja.com

HTTP 412エラーで応答するのが適切な場合

HTTP 412:前提条件の失敗、Webサービスのエラーを返す必要がある場合と返さない場合は不明です。データの検証時に使用することを考えています。たとえば、クライアントのPOSTのXMLデータとそのデータに必要なデータ要素がない場合、412とエラーの説明で応答します。

これは、HTTP 412で応答するという精神に沿っていますか、それとも他の何かを使用する必要がありますか(たとえば、別のhttpエラーコードまたはWebアプリケーション例外)。

34
TERACytE

RFC 2616 を見ると、リクエストに条件を適用するために使用できるリクエストヘッダーがいくつか表示されます。

If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since

これらのヘッダーには「前提条件」が含まれており、クライアントは特定の条件が満たされた場合にのみ要求を完了するようにサーバーに指示できます。たとえば、PUTリクエストを使用してリソースの状態を更新しますが、最近のPUT以降にリソースが他の誰かによって変更されていない場合にのみ、GETを実行する必要があります。

応答ステータスコード412(前提条件の失敗)は、通常、これらの前提条件が失敗したときに使用されます。

あなたの例は無効なリクエストのように聞こえます(つまり、クライアントは値が欠落しているために無効なデータを送信しました)。ステータスコード400(悪いリクエスト)は、ここIMOでより適切です。

55
joelittlejohn

412は、リクエストが条件付きで、条件が満たされない場合のために予約されています。

ユースケースでは、 422 Unprocessable Entity が最適です。

10
Julian Reschke

あなたの最善の策は412を避けることです。実際には、私が使用したほとんどのWebサービスは、 400 code(Bad Request) を送信します。多くのフレームワークには400のサポートも組み込まれているため、クライアントはより一般的なエラーコードに感謝します。多くの場合、特にRESTインターフェイスの場合、簡単な「メッセージ」または「エラー」要素が説明とともに返されます。

8
Matt Bishop