كيف تعمل طلبات HTTP

ماذا يحدث عند كتابة عنوان URL في المتصفح ، من البداية إلى النهاية

توضح هذه المقالة كيفية تنفيذ المستعرضات لطلبات الصفحة باستخدام بروتوكول HTTP / 1.1

إذا أجريت مقابلة من قبل ، فقد يتم سؤالك: "ماذا يحدث عندما تكتب شيئًا ما في مربع بحث Google وتضغط على إدخال".

إنه أحد الأسئلة الأكثر شيوعًا التي يتم طرحها عليك. يريد الناس فقط معرفة ما إذا كان بإمكانك شرح بعض المفاهيم الأساسية إلى حد ما وما إذا كان لديك أي فكرة عن كيفية عمل الإنترنت بالفعل.

في هذا المنشور ، سأحلل ما يحدث عندما تكتب عنوان URL في شريط العنوان في متصفحك وتضغط على Enter.

إنه موضوع مثير للاهتمام للغاية أن يتم تشريحه في منشور مدونة ، لأنه يلامس العديد من التقنيات التي يمكنني الغوص فيها في منشورات منفصلة.

هذه تقنية نادرًا ما يتم تغييرها ، وهي تدعم أكثر النظم البيئية تعقيدًا واتساعًا التي بناها البشر على الإطلاق.

بروتوكول HTTP

أولاً ، أذكر HTTPS على وجه الخصوص لأن الأشياء تختلف عن اتصال HTTPS.

أنا أحلل طلبات URL فقط

المتصفحات الحديثة لديها القدرة على معرفة ما إذا كان الشيء الذي كتبته في شريط العناوين هو عنوان URL حقيقي أو مصطلح بحث ، وسوف تستخدم محرك البحث الافتراضي إذا لم يكن عنوان URL صالحًا.

أفترض أنك تكتب عنوان URL الفعلي.

عند إدخال عنوان URL والضغط على إدخال ، يقوم المستعرض أولاً بإنشاء عنوان URL الكامل.

إذا قمت للتو بإدخال مجال ، مثلflaviocopes.com، المتصفح افتراضيًا سوف يسبقHTTP://إلى ذلك ، افتراضيا إلى بروتوكول HTTP.

الأشياء تتعلق بنظام macOS / Linux

لمعلوماتك فقط. قد يقوم Windows ببعض الأشياء بشكل مختلف قليلاً.

مرحلة بحث DNS

يبدأ المتصفح في تشغيل ملفDNSابحث للحصول على عنوان IP للخادم.

يعد اسم المجال اختصارًا مفيدًا لنا نحن البشر ، ولكن الإنترنت منظم بطريقة تمكن أجهزة الكمبيوتر من البحث عن الموقع الدقيق للخادم من خلال عنوان IP الخاص به ، وهو عبارة عن مجموعة من الأرقام مثل222.324.3.1(IPv4).

أولاً ، يتحقق من ذاكرة التخزين المؤقت المحلية لـ DNS ، لمعرفة ما إذا كان المجال قد تم حله بالفعل مؤخرًا.

يحتوي Chrome على متخيل مفيد لذاكرة التخزين المؤقت لنظام أسماء النطاقات يمكنك رؤيته علىالكروم: // net-internals / # dns

إذا لم يتم العثور على شيء هناك ، فسيستخدم المستعرض محلل DNS ، باستخدامgethostbynameاستدعاء نظام POSIX لاسترداد معلومات المضيف.

gethostbyname

gethostbynameيبحث أولاً في ملف hosts المحلي ، الموجود على macOS أو Linux/etc/hosts، لمعرفة ما إذا كان النظام يوفر المعلومات محليًا.

إذا لم يقدم هذا أي معلومات حول المجال ، يقوم النظام بتقديم طلب إلى خادم DNS.

يتم تخزين عنوان خادم DNS في تفضيلات النظام.

هذان خادمان DNS شهيران:

  • 8.8.8.8: خادم DNS العام لـ Google
  • 1.1.1.1: خادم CloudFlare DNS

يستخدم معظم الأشخاص خادم DNS الذي يوفره مزود الإنترنت الخاص بهم.

يقوم المتصفح بتنفيذ طلب DNS باستخدام بروتوكول UDP.

TCP و UDP هما من البروتوكولات التأسيسية لشبكات الكمبيوتر. يجلسون على نفس المستوى المفاهيمي ، لكن TCP موجه نحو الاتصال ، في حين أن بروتوكول UDP هو بروتوكول غير متصل ، وخفيف الوزن ، ويستخدم لإرسال الرسائل مع القليل من النفقات العامة.

كيفية تنفيذ طلب UDP ليست في نطاق هذا البرنامج التعليمي

قد يحتوي خادم DNS على عنوان IP للمجال في ذاكرة التخزين المؤقت. إذا لم يكن كذلك ، فسوف يسألخادم DNS الجذر. هذا نظام (يتكون من 13 خادمًا حقيقيًا ، موزعة عبر الكوكب) يقود الإنترنت بالكامل.

يفعل خادم DNSليستعرف على عنوان كل اسم مجال على هذا الكوكب.

ما تعرفه هو أينمحللات DNS عالية المستوىنكون.

نطاق المستوى الأعلى هو امتداد المجال:.comو.itو.pizzaوهكذا.

بمجرد أن يتلقى خادم DNS الجذر الطلب ، يقوم بإعادة توجيه الطلب إلى خادم DNS الخاص بنطاق المستوى الأعلى (TLD).

قل أنك تبحث عنهflaviocopes.com. يقوم خادم DNS للمجال الجذر بإرجاع عنوان IP الخاص بخادم .com TLD.

الآن سيقوم محلل DNS الخاص بنا بتخزين عنوان IP لخادم TLD هذا ، لذلك لا يتعين عليه طلب خادم DNS الجذر مرة أخرى.

سيكون لخادم TLD DNS عناوين IP لخوادم الأسماء الرسمية للمجال الذي نبحث عنه.

كيف؟ عند شراء مجال ، يرسل مسجل المجال TDL المناسب خوادم الأسماء. عندما تقوم بتحديث خوادم الأسماء (على سبيل المثال ، عندما تقوم بتغيير مزود الاستضافة) ، سيتم تحديث هذه المعلومات تلقائيًا بواسطة مسجل المجال الخاص بك.

هذه هي خوادم DNS لمزود الاستضافة. عادة ما تكون أكثر من 1 ، لتكون بمثابة نسخة احتياطية.

على سبيل المثال:

  • ns1.dreamhost.com
  • ns2.dreamhost.com
  • ns3.dreamhost.com

يبدأ محلل DNS بالأول ، ويحاول أن يطلب عنوان IP الخاص بالمجال (مع المجال الفرعي أيضًا) الذي تبحث عنه.

هذا هو المصدر النهائي للحقيقة لعنوان IP.

الآن بعد أن أصبح لدينا عنوان IP ، يمكننا المضي قدمًا في رحلتنا.

طلب TCP المصافحة

مع توفر عنوان IP للخادم ، يمكن للمتصفح الآن بدء اتصال TCP لذلك.

يتطلب اتصال TCP القليل من المصافحة قبل أن تتم تهيئته بالكامل ويمكنك البدء في إرسال البيانات.

بمجرد إنشاء الاتصال ، يمكننا إرسال الطلب

ارسال الطلب

الطلب عبارة عن مستند نصي عادي منظم بطريقة دقيقة يحددها بروتوكول الاتصال.

تتكون من 3 أجزاء:

  • سطر الطلب
  • عنوان الطلب
  • نص الطلب

خط الطلب

يعين سطر الطلب ، على سطر واحد:

  • طريقة HTTP
  • موقع المورد
  • إصدار البروتوكول

مثال:

GET / HTTP/1.1

عنوان الطلب

رأس الطلب عبارة عن مجموعة منfield: valueالأزواج التي تحدد قيمًا معينة.

هناك حقلين إلزاميين ، أحدهما هوHost، والآخرConnection، بينما جميع الحقول الأخرى اختيارية:

Host: flaviocopes.com
Connection: close

Hostيشير إلى اسم المجال الذي نريد استهدافه ، بينماConnectionدائمًا علىcloseما لم يكن الاتصال يجب أن يبقى مفتوحًا.

بعض حقول الرأس الأكثر استخدامًا هي:

  • Origin
  • Accept
  • Accept-Encoding
  • Cookie
  • Cache-Control
  • Dnt

ولكن يوجد الكثير.

يتم إنهاء جزء الرأس بسطر فارغ.

نص الطلب

نص الطلب اختياري ، ولا يتم استخدامه في طلبات GET ولكنه يُستخدم كثيرًا في طلبات POST وأحيانًا في الأفعال الأخرى أيضًا ، ويمكن أن يحتوي على بيانات فيجسونصيغة.

نظرًا لأننا نقوم الآن بتحليل طلب GET ، فإن الجسم فارغ ولن ننظر فيه أكثر.

الإجابة

بمجرد إرسال الطلب ، يقوم الخادم بمعالجته وإرسال استجابة مرة أخرى.

يبدأ الرد برمز الحالة ورسالة الحالة. إذا نجح الطلب وأرجع 200 ، فسيبدأ بـ:

200 OK

قد يعرض الطلب رمز حالة مختلفًا ورسالة مختلفة ، مثل أحد هذه الرسائل:

404 Not Found
403 Forbidden
301 Moved Permanently
500 Internal Server Error
304 Not Modified
401 Unauthorized

تحتوي الاستجابة بعد ذلك على قائمة برؤوس HTTP وجسم الاستجابة (والذي ، نظرًا لأننا نقدم الطلب في المتصفح ، سيكون HTML)

تحليل HTML

لقد تلقى المتصفح الآن HTML ويبدأ في تحليله ، وسيقوم بتكرار نفس العملية بالضبط التي قمنا بها لجميع الموارد التي تتطلبها الصفحة:

  • ملفات CSS
  • الصور
  • الأيقونة المفضلة
  • ملفات جافا سكريبت
  • ...

إن كيفية عرض المتصفحات للصفحة خارج النطاق ، ولكن من المهم أن نفهم أن العملية التي وصفتها ليست فقط لصفحات HTML ، ولكن لأي عنصر يتم تقديمه عبر HTTP.


المزيد من دروس الشبكة: