409 Conflict: طلبات تتعارض مع الحالة الحالية
409 Conflict يعني أن طلبًا صالحًا يتعارض مع الحالة الحالية للمورد، كتعارض في التعديل أو اسم مستخدم مسبقًا.
409 Conflict يعني أن الطلب يتعارض مع الحالة الحالية للمورد. الطلب نفسه صالح؛ لكن لا يمكن تطبيقه في الوضع القائم. فقد عدّل شخص آخر السجل نفسه قبلك، أو الاسم الذي اخترته محجوز، أو النسخة التي تحدّثها قديمة.
التعريف
يقول RFC 9110، القسم 15.5.10 إن 409 يناسب الحالات التي قد يستطيع فيها المستخدم حل التعارض وإعادة الإرسال، وإن على الخادم أن يضمّن ما يكفي من المعلومات للتعرف على مصدر التعارض. وأرجح مكان للتعارض طلبات PUT، مثلًا عندما يرسل عميل تعديلات مبنية على نسخة أقدم من المستند.
أمثلة نموذجية
- تعارض التعديلات في نظام إدارة محتوى أو ويكي عندما يحفظ شخصان الصفحة نفسها.
- الأسماء الفريدة: إنشاء اسم مستخدم أو slug أو حاوية تخزين موجودة مسبقًا. مثلًا يرد Amazon S3 بـ 409 على اسم حاوية محجوز.
- التزامن المتفائل (optimistic concurrency): واجهات مثل Kubernetes ترفض التحديثات التي تحمل إصدار مورد قديمًا بالرمز 409.
- قواعد الحالة: إلغاء طلب شراء شُحن بالفعل.
رموز ذات صلة: الإنشاء الناجح يعيد 201، و422 للمدخلات التي تفشل في التحقق، و412 Precondition Failed لشرط If-Match صريح لا يتحقق.
التأثير على السيو
الرمز 409 يخص عمليات الكتابة، فلا ينبغي أن تصادفه الزواحف. وإذا أعادت صفحة عامة 409 لطلب GET عادي، فهناك خطأ في الإعداد، وتتعامل معه Google كأي رمز 4xx آخر فتُسقط الرابط من الفهرس (وثائق Google). افحص الصفحات المشكوك فيها بـ أداة فحص حالة HTTP، فهي يجب أن تبلّغ عن 200 لكل رابط قابل للفهرسة.
كيف تتعامل معه
الرمز 409 الجيد يخبر العميل ماذا يفعل بعد ذلك. أعد النسخة الحالية ليتمكن العميل من الدمج أو إعادة المحاولة، والأفضل بصيغة Problem Details (RFC 9457):
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "https://example.com/probs/edit-conflict",
"title": "This page was changed by another editor",
"status": 409,
"current_version": 18
}
أما من جهة العميل، فاجلب المورد من جديد، وأرِ المستخدم ما الذي تغيّر، ثم أعد الإرسال. وفي تعارض الأسماء، اقترح بديلًا متاحًا بدل إعادة خطأ مجرد.
الأسئلة الشائعة
ما الفرق بين 409 و422؟
الرمز 422 يعني أن البيانات المرسلة غير صالحة في ذاتها، كعنوان بريد مشوه. والرمز 409 يعني أن البيانات قد تكون سليمة لكنها تتعارض مع الحالة الحالية للمورد، كاسم مكرر أو نسخة قديمة.
لماذا يظهر لي 409 Conflict عند الحفظ في نظام إدارة المحتوى؟
غالبًا حفظ شخص آخر، أو تبويب آخر، المحتوى نفسه قبلك، فأصبحت نسختك قديمة. أعد تحميل أحدث نسخة، وأعد تطبيق تعديلاتك، ثم احفظ مرة أخرى.
هل يمكن أن يؤثر الخطأ 409 على سيو موقعي؟
فقط إذا أعادته صفحات عامة لطلبات GET العادية، وهذا خطأ في الإعداد. حينها تعامل Google تلك الروابط كصفحات 4xx الأخرى وتزيلها من الفهرس.