[対処法] 409 Conflict

2013 年 10 月 25 日 金曜日

409 Conflict

原因

クライアント(おもにWebサーバ)から送信されたリクエストと、サーバに既に存在しているデータが競合しているため、リクエストを完了できない。

例えば、サーバにあるファイルをアップロードしようとした際に、すでに同じファイルがサーバに存在し、さらにアップロードを試みているファイルがサーバにあるファイルよりも古い場合に409 Conflictが発生することがある。

既存のデータが古いデータで上書きされることを防ぐためのエラーで、その多くはアプリケーションによって組み込まれたメカニズムにより検出され、エラーが出力されている。複数人が同時にアクセスし、データ更新をすることが多いサービス、例えばGoogleカレンダーなどでは、共有カレンダーの予定が複数のクライアントから同時に更新された場合などに、古い情報で上書きされないように、リクエストの衝突を検出するメカニズムが組み込まれている。

Optimistic concurrency (versioning)

対処法

RFC2616 10.4.10 409 Conflictには、

The response body SHOULD include enough information for the user to recognize the source of the conflict.
レスポンス本体には衝突の原因となるデータに関する十分な情報が含まれているべきです。

Ideally, the response entity would include enough information for the user or user agent to fix the problem;
レスポンス実態にはユーザーまたはユーザーエージェントに問題を解消するための十分な情報が含まれているのが理想的です。

と書かれており、これに準拠したシステムであれば、レスポンスデータを確認することで対処できるはずだ。

また、バージョンの衝突が明らかな場合は、一旦最新のデータを取得し、取得したデータに対して何らかのデータ処置を行ったのちに、再度PUTやDELETEを行うことで問題が解消する可能性がある。

問題を解消するための十分な情報が含まれていない場合は、サーバまたはアプリケーション管理者に問い合わせる必要がある。

コメントをどうぞ

トラックバック

このエントリーのトラックバックURL:

http://www.bmoo.net/archives/2012/04/314045.html/trackback