412 Precondition Failed は、リクエストヘッダーに含まれる 1 つ以上の条件が偽と評価されたことを示します。If-Match や If-Unmodified-Since が成立しなかった場合、または GET と HEAD 以外のメソッドで If-None-Match が成立しなかった場合の結果です。サーバーは、要求された操作を実行していません。
主な目的は、更新の消失を防ぐこと(楽観的並行性制御)です。クライアントはリソースをその ETag と一緒に読み取って編集し、If-Match にその ETag を指定して変更を送信します。その間に誰かがリソースを変更していれば ETag はもう一致しないので、サーバーはほかの人の変更を上書きせず、412 で応答します。また、If-None-Match: * と組み合わせて、まだ存在しない場合にだけリソースを作成する用途にも使われます。
GET と HEAD では、If-None-Match や If-Modified-Since が偽になると、412 ではなく 304 Not Modified が返されます。
レスポンス例
HTTP
HTTP/1.1 412 Precondition Failed
Date: Fri, 06 Nov 2026 10:15:32 GMT
ETag: "v8"
Content-Type: application/json
Content-Length: 52
{"error":"If-Match does not match the current ETag"} SEO とリダイレクトチェック
よくある原因と主な用途
- 読み取った後でリソースが変更されていたため、編集が拒否された場合(ETag の不一致)。
If-None-Match: *によって、既存のファイルの上書きが防がれた場合。- クラウドストレージや CDN の API が、古い ETag を含む条件付きリクエストを受け取った場合。