60

HTTP 412: Precondition Failed, error for a web service? を返す必要がある場合と返すべきでない場合は、私にはわかりません。データの検証時に使用することを考えています。たとえば、クライアント POST の XML データで、そのデータに必要なデータ要素が欠落している場合、412 とエラーの説明で応答します。

それは HTTP 412 で応答するという精神に沿っているのでしょうか、それとも別のものを使用する必要がありますか (別の http エラー コードや Web アプリケーションの例外など)?

4

3 に答える 3

80

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

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

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

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

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

于 2011-03-20T15:57:32.953 に答える
24

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

あなたのユースケースでは、422 Unprocessable Entityが適切です。

于 2011-03-20T16:47:14.810 に答える
12

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

于 2011-03-20T15:46:45.003 に答える