DevToolPal
日本語
4xx クライアントエラー

412 Precondition Failed

前提条件の失敗

意味

If-Match や If-Unmodified-Since などリクエストヘッダーの前提条件が偽と評価されたため、サーバーはリクエストを適用しませんでした。

よくある原因

  • 他の誰かがリソースを更新した(ETag が変わった)
  • If-Match に古いキャッシュの ETag を使った
  • より新しいオブジェクトがあるストレージへの条件付きアップロード

対処法

クライアント・閲覧者の場合

リソースを再度 GET して現在の ETag を取得し、変更を適用し直して再送します。

サイトや API の運営者の場合

現在の ETag を返し、条件チェックと書き込みをアトミックにします。

レスポンス例

HTTP/1.1
HTTP/1.1 412 Precondition Failed
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "v8"
Content-Type: application/problem+json

{
  "type": "about:blank",
  "title": "Precondition Failed",
  "status": 412,
  "detail": "If-Match \"v7\" does not match the current version \"v8\"."
}

仕様

RFC 9110 §15.5.13

よくある質問

› 楽観的同時実行制御とは?

クライアントは読み取ったときの ETag を If-Match で送り、その間にリソースが変わっていればサーバーが 412 で書き込みを拒否します。

› 412 と 428 の違いは?

412:送った前提条件が成り立たなかった。428:そもそも前提条件を送る必要がある。