ماذا يحدث عند كتابة عنوان URL في المتصفح ، من البداية إلى النهاية
- بروتوكول HTTP
- أنا أحلل طلبات URL فقط
- الأشياء تتعلق بنظام macOS / Linux
- مرحلة بحث DNS
- طلب TCP المصافحة
- ارسال الطلب
- الإجابة
- تحليل HTML
توضح هذه المقالة كيفية تنفيذ المستعرضات لطلبات الصفحة باستخدام بروتوكول 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 العام لـ Google1.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.
المزيد من دروس الشبكة:
- مقدمة في WebSockets
- كيف تعمل طلبات HTTP
- قائمة رؤوس طلبات HTTP
- قائمة رؤوس استجابة HTTP
- HTTP مقابل HTTPS
- ما هو RFC؟
- بروتوكول HTTP
- بروتوكول HTTPS
- دليل curl لطلبات HTTP
- التخزين المؤقت في HTTP
- قائمة رموز حالة HTTP
- ما هو CDN؟
- بروتوكول HTTP / 2
- ما هو الميناء
- DNS ، نظام اسم المجال
- بروتوكول TCP
- بروتوكول UDP
- مقدمة لواجهات برمجة تطبيقات REST
- كيفية تثبيت شهادة SSL محلية في macOS
- كيفية إنشاء شهادة SSL محلية
- كيفية تكوين Nginx لـ HTTPS
- وكيل عكسي بسيط لـ nginx لخدمة تطبيقات Node.js متعددة من مجلدات فرعية
- ما هو عكس الوكيل؟