INDEX
412 Precondition Failedについて
412 Precondition Failedの概要
条件が満たされないことを示すHTTPステータスコード | ||
412 Precondition Failed 概要 412 Precondition Failedは、クライアントがリクエストで指定した事前条件がサーバーによって満たされなかった場合に返されるHTTPステータスコードです。この事前条件は通常、 |
||
影響 サーバーがリクエストを拒否するため、リソースの取得や変更が完了しません。これは、競合や変更の防止を目的として設計されています。 |
412 Precondition Failedはどのような時に発生するか
If-Match
ヘッダーで指定されたETagが現在のリソースのETagと一致しない場合If-Unmodified-Since
ヘッダーで指定された日時以降にリソースが変更されている場合- サーバーがクライアントの条件をサポートしていない場合
SEOに関する影響
412エラーは、APIやバックエンド通信でよく発生し、SEOへの直接的な影響は少ないですが、ユーザー体験には影響を及ぼす可能性があります。特にクライアントアプリケーションがこのエラーを適切に処理しない場合、機能が停止することがあります。
412 Precondition Failedの事例
以下に、よくある発生事例を示します。
ETagが一致しない場合
PUT /resource/123 HTTP/1.1 Host: example.com If-Match: "old-etag" Content-Type: application/json { "name": "Updated Resource" }
リクエストで指定されたIf-Match
ヘッダーのETagがリソースの現在のETagと一致しない場合、412エラーが返されます。
未修正の条件が満たされない場合
PUT /resource/123 HTTP/1.1 Host: example.com If-Unmodified-Since: Wed, 21 Oct 2020 07:28:00 GMT Content-Type: application/json { "name": "Updated Resource" }
リソースがIf-Unmodified-Since
で指定された日時以降に変更されている場合、サーバーは412エラーを返します。
サーバーでの処理と解決
412エラーを適切に処理するために、以下の対応を検討してください。
- ETagや条件付きヘッダーを正しく実装する
解決策:リソースのバージョン管理を適切に行い、クライアントの条件付きリクエストに対応できるようにします。 - リソースの状態を明示する
解決策:エラーレスポンスに現在のリソースの状態やETagを含めて、クライアントが次のアクションを決定できるようにします。 - リクエストのログを記録する
解決策:条件が満たされない理由をログに記録し、問題の特定を容易にします。
クライアントの対応と解決
クライアント側では、以下の方法で412エラーを解決できる可能性があります。
- 最新のリソース情報を取得する
解決策:リソースの現在のETagや状態を再取得し、リクエストを更新してください。 - 条件付きヘッダーを適切に設定する
解決策:APIドキュメントに基づいて正しい条件を指定してください。 - 競合を解決する
解決策:サーバーが返した現在のリソース状態を利用して、変更内容を調整します。 - リトライロジックを実装する
解決策:条件が満たされなかった場合に備えて、再リクエストを行う仕組みを導入します。
関連するHTTPステータスコードとの比較
412 Precondition Failedと混同されやすいステータスコードについて解説します。
- 409 Conflict: リソースの競合が発生した場合に返されるエラー
- 428 Precondition Required: 条件付きリクエストが必要である場合に返されるエラー
これらの違いを理解することで、適切な対応が可能になります。