303 See Other: إعادة التوجيه بعد إرسال النموذج
303 See Other يحوّل العميل إلى رابط آخر يجب جلبه بطريقة GET، وعادةً يكون ذلك بعد إرسال نموذج.
303 See Other يحوّل العميل إلى رابط مختلف ويطلب منه جلبه بالطريقة GET، أيًّا كانت الطريقة التي استخدمها الطلب الأصلي. ومهمته الكلاسيكية إنهاء إرسال نموذج: يعالج الخادم طلب POST ثم يوجّه المتصفح إلى صفحة النتيجة.
التعريف
يصف RFC 9110، القسم 15.4.4 الرمز 303 بأنه تحويل إلى مورد آخر، مذكور في Location، يقدّم «ردًا غير مباشر على الطلب الأصلي». ويتبعه العميل بطلب GET. وعلى خلاف 302 لا غموض هنا في الطريقة، وعلى خلاف 307 فالمقصود أن تتغير الطريقة.
ورود 303 ردًا على طلب GET أقل شيوعًا. ويعني أن الخادم ليس لديه تمثيل للشيء المطلوب ليرسله، لكن الرابط الهدف يصفه. وتستخدم مواقع البيانات المترابطة (Linked Data) ذلك للفصل بين معرّف كيان في العالم الحقيقي والمستند الذي يتحدث عنه.
نمط Post/Redirect/Get
بدون التحويل، يؤدي تحديث صفحة «شكرًا» إلى إعادة إرسال النموذج وقد يتسبب في طلبات أو رسائل مكررة. ويحل نمط Post/Redirect/Get هذه المشكلة:
POST /contact HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
name=Sara&message=Hello
HTTP/1.1 303 See Other
Location: /contact/thanks/
Content-Length: 0
في PHP: header('Location: /contact/thanks/', true, 303);. وفي Express: res.redirect(303, '/contact/thanks/').
التأثير على السيو
تعامل وثائق Google الرمز 303 مثل 302: يتبعه Googlebot، لكنه إشارة ضعيفة فقط إلى الرابط الأساسي، فيبقى الرابط الأصلي هو الأساسي عمومًا. وهذا مناسب لمسارات النماذج التي لا ترسلها الزواحف أصلًا. وهناك ملاحظتان عمليتان:
- لا تستخدم 303 لنقل الصفحات. وللنقل الدائم استخدم 301 أو 308.
- صفحات التأكيد و«شكرًا» لا قيمة لها في البحث؛ أضف noindex كي تبقى خارج الفهرس إذا أشار إليها أحد برابط.
ولمعرفة ما يعيده رابط صفحة عند زيارة عادية، تتبّعه بـ أداة فحص التحويلات.
الأسئلة الشائعة
متى أستخدم 303 بدل 302؟
استخدم 303 بعد POST أو PUT أو DELETE عندما تريد أن يحمّل المتصفح صفحة النتيجة بطريقة GET. فهو يعبّر عن هذا القصد بوضوح، بينما اختلف تعامل العملاء مع طريقة الطلب في 302 تاريخيًا.
هل تعامل Google الرمز 303 بشكل مختلف عن 302؟
لا. تقول وثائق Google إن 303 يُعامل مثل 302: يتبعه Googlebot، ويبقى الرابط الأصلي عادةً هو الأساسي.
لماذا تطلب صفحة النموذج عندي إعادة إرسال البيانات عند التحديث؟
لأن صفحة نتيجة النموذج أُعيدت مباشرة ردًا على طلب POST. حوّل بـ 303 إلى رابط نتيجة مستقل، وعندها سيؤدي التحديث إلى إعادة تحميل تلك الصفحة فقط.