100 Continue: الاستجابة المؤقتة قبل رفع الملف
100 Continue استجابة مؤقتة تخبر العميل أن الخادم قبل ترويسات الطلب، وأن بإمكانه الآن إرسال جسم الطلب.
100 Continue استجابة مؤقتة. تخبر العميل أن الخادم قرأ ترويسات الطلب ولم يرفضها، وأنه جاهز لاستقبال جسم الطلب. أما الرد الحقيقي، وهو رمز حالة نهائي مثل 201 Created، فيأتي بعد وصول الجسم كاملًا.
ماذا يقول المعيار
يعرّف RFC 9110، القسم 15.2.1 الرمز 100 بأنه إشارة إلى أن «الجزء الأول من الطلب وصل ولم يرفضه الخادم بعد». ويعمل مع ترويسة الطلب Expect: 100-continue: يرسل العميل الترويسات ثم ينتظر، ولا يرسل الجسم الكبير إلا بعد أن يقول الخادم «تفضّل بالمتابعة».
الغاية هي تجنب رفع ملفات تذهب هباءً. فإذا كان الخادم يعرف مسبقًا أنه سيرفض الطلب (الملف كبير جدًا أو بيانات الدخول ناقصة)، يستطيع الرد فورًا بـ 413 Content Too Large أو 401 Unauthorized، فلا يرسل العميل ملفًا حجمه 500 MB دون فائدة. وإذا كان الخادم لا يستطيع تلبية التوقّع أصلًا، فيمكنه الرد بـ 417 Expectation Failed.
أين ستقابله
- رفع الملفات وطلبات POST أو PUT الكبيرة القادمة من أدوات سطر الأوامر ومكتبات SDK. على سبيل المثال، يضيف curl الترويسة
Expect: 100-continueتلقائيًا عندما يكون جسم الطلب كبيرًا. - واجهات التخزين السحابي (object storage)، والبروكسيات التي تمرّر الرفع إليها.
- بروكسيات قديمة لا تتعامل مع هذا التوقّع، فيتأخر الرفع قليلًا بينما ينتظر العميل ثم يرسل البيانات على أي حال.
التأثير على السيو
لا تأثير في الزحف العادي. تجلب برامج زحف محركات البحث الصفحات بطلبات GET بلا جسم، فلا شيء هناك ليُستكمل. ولأن رموز 1xx مؤقتة، فإن ما يعتمد عليه الزاحف هو رمز الحالة النهائي الذي يليها. وتعرض أداة فحص ترويسات HTTP لدينا هذا الرد النهائي أيضًا. وإذا ظهر الرمز 100 كنتيجة نهائية لصفحة ما، فهذا يعني أن الخادم أو أحد البروكسيات يقطع الرد قبل اكتماله، فتعامل معه كخطأ في الخادم.
إصلاح تأخر الرفع
إذا كان الرفع عبر بروكسي يتجمّد ثانية قبل أن يبدأ، فأزل التوقّع من جهة العميل. في إضافة cURL لـ PHP تكفي ترويسة فارغة لحذفه:
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Expect:']);
وفي سطر أوامر curl أضف -H 'Expect:'. أما من جهة الخادم، فتأكد أن التطبيق أو البروكسي الذي أمامه يرد بـ 100 سريعًا أو يرفض الطلب مبكرًا.
مثال على تبادل الطلب والرد
PUT /uploads/video.mp4 HTTP/1.1
Host: storage.example.com
Content-Type: video/mp4
Content-Length: 524288000
Expect: 100-continue
HTTP/1.1 100 Continue
[العميل يرسل جسم الطلب بحجم 500 MB]
HTTP/1.1 201 Created
Location: /uploads/video.mp4 الأسئلة الشائعة
هل 100 Continue خطأ؟
لا. هو استجابة معلوماتية تقول إن الخادم قبل ترويسات الطلب وينتظر الجسم. ويأتي بعده دائمًا رمز حالة نهائي مثل 200 أو 201.
لماذا تنتظر أداة الرفع قبل إرسال البيانات؟
لأنها أرسلت Expect: 100-continue وتنتظر إذن الخادم. وإذا لم يرد الخادم أو أحد البروكسيات، ينتظر curl نحو ثانية افتراضيًا ثم يرسل الجسم على أي حال. حذف ترويسة Expect يتجنب هذا التأخير.
هل يتلقى Googlebot الرمز 100 Continue؟
ليس في الزحف العادي. يطلب Googlebot الصفحات بـ GET ولا يرسل جسم طلب، فلا شيء ليؤكده الخادم. المهم للسيو هو رمز الحالة النهائي للصفحة.