اتصال HTTP مستمر
يُعرف اتصال HTTP المستمر ، أو ما يُسمى أيضًا بـ HTTP keep-alive أو إعادة استخدام اتصال HTTP ، بأنه استخدام اتصال TCP واحد لإرسال واستقبال طلبات واستجابات HTTP متعددة ، بدلاً من فتح اتصال جديد لكل زوج من الطلبات والاستجابات. ويستخدم بروتوكول HTTP/2 الأحدث الفكرة نفسها، بل ويُطوّرها ليسمح بتعدد إرسال واستقبال الطلبات والاستجابات المتزامنة عبر اتصال واحد.
عملية
HTTP 1.0
في بروتوكول HTTP 1.0، يجب على الخادم دائمًا إغلاق الاتصالات بعد إرسال الاستجابة. [ 1 ]
منذ أواخر عام 1995 على الأقل، [ 2 ] بدأ مطورو المنتجات الشائعة (المتصفحات، خوادم الويب، إلخ) التي تستخدم بروتوكول HTTP/1.0، بإضافة امتداد غير رسمي (للبروتوكول) يُسمى "keep-alive" للسماح بإعادة استخدام الاتصال لطلبات/استجابات متعددة. [ 3 ] [ 4 ]
إذا كان العميل يدعم خاصية إبقاء الاتصال مفتوحًا، فإنه يضيف رأسًا إضافيًا إلى الطلب:
الاتصال: إبقاء الاتصال
عندما يستقبل الخادم هذا الطلب ويُنشئ استجابة، إذا كان يدعم خاصية إبقاء الاتصال مفتوحًا، فإنه يُضيف أيضًا نفس الترويسة المذكورة أعلاه إلى الاستجابة. بعد ذلك، لا يتم قطع الاتصال، بل يبقى مفتوحًا. وعندما يُرسل العميل طلبًا آخر، فإنه يستخدم نفس الاتصال.
سيستمر هذا حتى يقرر العميل أو الخادم أن المحادثة قد انتهت، وفي هذه الحالة يحذفون العنوان "Connection:"من آخر رسالة تم إرسالها، أو الأفضل من ذلك، يضيفون الكلمة المفتاحية "close" إليها:
الاتصال: مغلق
بعد ذلك يتم إغلاق الاتصال وفقًا للقواعد المحددة.
منذ عام 1997، أقرت الإصدارات المختلفة من مواصفات HTTP/1.1 باستخدام هذا الامتداد غير الرسمي، وتضمنت بعض التحذيرات المتعلقة بالتوافق بين عملاء/خوادم HTTP/1.0 (keep-alive) وHTTP/1.1. [ 5 ]
HTTP 1.1
في بروتوكول HTTP 1.1، تُعتبر جميع الاتصالات مستمرة ما لم يُنص على خلاف ذلك. [ 5 ] لا تستخدم اتصالات HTTP المستمرة رسائل إبقاء الاتصال منفصلة، بل تسمح ببساطة لعدة طلبات باستخدام اتصال واحد. مع ذلك، فإن مهلة الاتصال الافتراضية في Apache httpd 1.3 و2.0 لا تتجاوز 15 ثانية [ 6 ] [ 7 ] ، و5 ثوانٍ فقط في Apache httpd 2.2 والإصدارات الأحدث. [ 8 ] [ 9 ] تكمن ميزة المهلة القصيرة في القدرة على عرض مكونات متعددة لصفحة الويب بسرعة دون استهلاك موارد لتشغيل عمليات أو خيوط خادم متعددة لفترة طويلة. [ 10 ]
خاصية Keepalive مع ترميز النقل المجزأ
يُصعّب استخدام Keepalive على العميل تحديد نهاية استجابة وبداية الاستجابة التالية، خاصةً أثناء عمليات HTTP المتسلسلة. [ 11 ] تُعدّ هذه مشكلة خطيرة عند Content-Lengthتعذر استخدام Keepalive بسبب البث المباشر. [ 12 ] لحلّ هذه المشكلة، قدّم بروتوكول HTTP 1.1 ترميز نقل مُجزّأ يُحدّد last-chunkبتًا. [ 13 ] يُضبط هذا last-chunkالبت في نهاية كل استجابة لكي يعرف العميل بداية الاستجابة التالية.
المزايا
- تقليل زمن الاستجابة في الطلبات اللاحقة (لا مصافحة ولا بدء بطيء ).
- انخفاض استخدام وحدة المعالجة المركزية وعدد الرحلات ذهابًا وإيابًا بسبب انخفاض عدد الاتصالات الجديدة وعمليات المصافحة TLS .
- يُمكّن من معالجة الطلبات والاستجابات عبر بروتوكول HTTP.
- تقليل ازدحام الشبكة (عدد أقل من اتصالات TCP ).
- يمكن الإبلاغ عن الأخطاء دون التعرض لعقوبة إغلاق اتصال TCP.
وفقًا للقسم 6.4 من RFC 7230 ، "ينبغي على العميل الحد من عدد الاتصالات المفتوحة المتزامنة التي يُبقيها مع خادم مُحدد". وقد نص الإصدار السابق من مواصفات HTTP/1.1 على قيم قصوى مُحددة، ولكن بحسب RFC 7230، "تبين أن هذا غير عملي للعديد من التطبيقات... لذا... يُنصح بالتحفظ عند فتح اتصالات متعددة". تهدف هذه الإرشادات إلى تحسين أوقات استجابة HTTP وتجنب الازدحام. إذا تم تطبيق تقنية تجميع HTTP بشكل صحيح، فلن يكون هناك أي تحسن في الأداء من الاتصالات الإضافية، بل قد تُسبب هذه الاتصالات الإضافية مشاكل في الازدحام. [ 14 ]
العيوب
إذا لم يغلق العميل الاتصال بعد استلام جميع البيانات المطلوبة، فإن الموارد اللازمة لإبقاء الاتصال مفتوحًا على الخادم ستكون غير متاحة للعملاء الآخرين. يؤثر هذا على كلٍ من توافر الخادم وتوافر موارده، وتختلف درجة التأثير باختلاف بنية الخادم وتكوينه.
قد تحدث حالة تضارب في البيانات عندما يرسل العميل طلبًا إلى الخادم في نفس لحظة إغلاق الخادم لاتصال TCP. [ 15 ] يجب على الخادم إرسال رمز حالة 408 (انتهت مهلة الطلب) إلى العميل مباشرةً قبل إغلاق الاتصال. عندما يتلقى العميل رمز الحالة 408، بعد إرسال الطلب، قد يفتح اتصالًا جديدًا بالخادم ويعيد إرسال الطلب. [ 16 ] لن يعيد جميع العملاء إرسال الطلب، والعديد ممن يفعلون ذلك لن يفعلوا ذلك إلا إذا كان الطلب يحتوي على طريقة HTTP غير قابلة للتكرار .
استخدم في متصفحات الويب

تستخدم جميع متصفحات الويب الحديثة بما في ذلك Chrome و Edge و Firefox و Opera (منذ الإصدار 4.0) [ 17 ] و Safari اتصالات مستمرة.
في متصفح فايرفوكس، يمكن تخصيص عدد الاتصالات المتزامنة (لكل خادم، لكل خادم وكيل، الإجمالي). تنتهي صلاحية الاتصالات المستمرة بعد 115 ثانية (1.92 دقيقة) من عدم النشاط، ويمكن تغيير ذلك من خلال الإعدادات. [ 18 ]
تطبيق
requestsتحتوي مكتبة بايثون requests.Session()على وظيفة تُنشئ اتصال HTTP مستمر، مما يسمح بإعادة استخدام اتصال TCP الأساسي، وهو ما يمكن أن يؤدي إلى زيادة كبيرة في الأداء. [ 19 ]
انظر أيضاً
- تقنية تجميع طلبات HTTP ، حيث يمكن إرسال طلبات متعددة دون انتظار رد.
- يسمح بروتوكول HTTP/2 بمعالجة الطلبات والاستجابات بشكل غير متسلسل، بالإضافة إلى إمكانية إرسال المحتوى بشكل استباقي قبل طلبه.
مراجع
- ↑ بروتوكول نقل النص التشعبي (HTTP/1.0): التشغيل العام
- ↑ جيلدور، دان. "HTTP_Connection؟" . مجموعات جوجل . تم الاسترجاع في 17 نوفمبر 2023 .
- ↑ "دليل TCP/IP - إنشاء وإدارة وإنهاء اتصال HTTP الدائم" . www.tcpipguide.com . مؤرشف من الأصل بتاريخ 21-05-2017 . تم الاطلاع عليه بتاريخ 31-12-2017 .
- ↑ ديفيد غورلي؛ برايان توتي؛ مارجوري ساير؛ أنشو أغاروال؛ سايلو ريدي (2002). بروتوكول نقل النص التشعبي (HTTP): الدليل الشامل. (مقتطف من الفصل: "الاتصالات المستمرة") . دار نشر أورايلي ميديا. رقم ISBN 9781565925090تم الاطلاع عليه بتاريخ 18-10-2021 .
- 1 2 بروتوكول نقل النص التشعبي (HTTP/1.1): بناء جملة الرسالة والتوجيه، والاستمرارية
- ↑ "خادم Apache HTTP 1.3 - توجيه KeepAliveTimeout" . مؤرشف من الأصل بتاريخ 26-10-2015 . تم الاطلاع عليه بتاريخ 28-01-2015 .
- ↑ خادم Apache HTTP 2.0 – توجيه KeepAliveTimeout
- ↑ خادم Apache HTTP 2.2 – توجيه KeepAliveTimeout
- ↑ خادم Apache HTTP 2.4 – توجيه KeepAliveTimeout
- ↑ متعدد (ويكي). "Httpd/KeepAlive" . Docforge . مؤرشف من الأصل في 6 يناير 2010. تم الاسترجاع في 30 يناير 2010 .
- ↑ "HTTP: ما هي العلاقات بين خطوط الأنابيب، و Keep-Alive، و Server Send Events" ؟
- ↑ "بث HTTP (أو التجزئة مقابل التخزين وإعادة التوجيه)" .
- ^ “ترميز النقل المقسم” . يونيو 1999.
- ↑ نيلسن، فريستيك هنريك؛ جيتيس، جيمس؛ بيرد-سميث، أنسيلم؛ برودوميو، إريك؛ ويوم لي، هاكون؛ ليلي، كريس (أكتوبر 1997)، "تأثيرات أداء الشبكة لبروتوكول HTTP/1.1 وCSS1 وPNG" ، مجلة ACM SIGCOMM لمراجعة اتصالات الحاسوب ، 27 (4)، ISSN 0146-4833
- ↑ "كيف تتعامل المتصفحات مع حالة التزامن في بروتوكول HTTP keepalive؟" . Stack Overflow . 6 مارس 2017.
- ↑ فيلدينغ، روي ت.؛ ريشكه، جوليان (يونيو 2014). فيلدينغ، ر.؛ ريشكه، ج. (محرران). "بروتوكول نقل النص التشعبي (HTTP/1.1): الدلالات والمحتوى" . متتبع بيانات IETF . doi : 10.17487/RFC7231 . S2CID 14399078 .
- ↑ "تحديثات أوبرا 4.0 لتبادل الملفات: تتضمن HTTP 1.1" . شركة أوبرا للبرمجيات. 28 مارس 2000. تاريخ الاسترجاع: 8 يوليو 2009 .
- ↑ "Network.http.keep-alive.timeout" . Mozillazine.org . تم الاطلاع عليه بتاريخ 17-07-2009 .
- ↑ "Requests.AdvancedUsage.SessionObjects" . ©2019. مشروع كينيث ريتز . تم الاطلاع عليه بتاريخ 22 أبريل 2023 .
روابط خارجية
- بروتوكول نقل النص التشعبي
