كمطور برامج ، سيكون لديك بالتأكيد فهم كامل وهرمي لكيفية عمل تطبيقات الشبكة ، ويشمل ذلك أيضًا التقنيات المستخدمة في هذه التطبيقات: مثل المتصفحات ، HTTP ، HTML ، خوادم الويب ، معالجة المتطلبات ، إلخ.
ستدرس هذه المقالة المزيد من التعمق في الخلفية عند إدخال عنوان URL ~
1. أولاً وقبل كل شيء ، عليك إدخال عنوان URL المطلوب في المتصفح : 2. يبحث المتصفح عن عنوان IP الخاص باسم المجالالخطوة الأولى في التنقل هي معرفة عنوان IP الخاص به عن طريق الوصول إلى اسم المجال. عملية البحث DNS هي كما يلي:
التخزين المؤقت للمتصفح - سجلات المستعرض DNS سجلات لفترة من الوقت. ومن المثير للاهتمام ، أن نظام التشغيل لا يخبر المتصفح الوقت لتخزين سجل DNS ، بحيث ستخزن المتصفحات المختلفة وقتًا محددًا ذاتيًا (يتراوح من دقيقتين إلى 30 دقيقة). ذاكرة التخزين المؤقت للنظام - إذا لم يتم العثور على السجل المطلوب في ذاكرة التخزين المؤقت للمتصفح ، فسيقوم المتصفح بإجراء مكالمة نظام (GethostbyName في Windows). هذا يتيح لك الحصول على سجلات في ذاكرة التخزين المؤقت للنظام. ذاكرة التخزين المؤقت لجهاز التوجيه - بعد ذلك ، يتم إرسال طلب الاستعلام السابق إلى جهاز التوجيه ، والذي يحتوي بشكل عام على ذاكرة التخزين المؤقت الخاصة بـ DNS الخاصة به. ISP DNS Cache - الشيء التالي الذي يجب التحقق منه هو الخادم الذي يقوم فيه ISP بتخزين DNS. هذا هو المكان الذي يمكن فيه العثور على سجلات ذاكرة التخزين المؤقت المقابلة. البحث المتكرر-يبدأ خادم DNS الخاص بـ ISP بخادم اسم المجال ، من خادم اسم المجال العليا .com إلى خادم اسم مجال Facebook. بشكل عام ، سيكون هناك أسماء نطاقات في خادم اسم المجال .com في ذاكرة التخزين المؤقت لخوادم DNS ، وبالتالي فإن عملية المطابقة مع الخادم من المستوى الأعلى ليست ضرورية.يظهر البحث العودية DNS في الشكل أدناه:
DNS مقلقة بعض الشيء ، أي أن اسم المجال بأكمله مثل wikipedia.org أو facebook.com يبدو أنه يتوافق مع عنوان IP منفصل. لحسن الحظ ، هناك عدة طرق للقضاء على عنق الزجاجة:
حلقة DNS هي الحل عند إرجاع IPs متعددة عند البحث عن DNS. على سبيل المثال ، يتوافق Facebook.com فعليًا مع أربعة عناوين IP. موازن التحميل هو جهاز للأجهزة يستمع إلى عنوان IP معين ويقوم بإعادة توجيه طلبات الشبكة إلى خادم الكتلة. تستخدم بعض المواقع الكبيرة عمومًا هذا الوافد باهظ الثمن. تعمل DNS الجغرافية على تحسين قابلية التوسع عن طريق تعيين أسماء المجال إلى عناوين IP مختلفة متعددة بناءً على الموقع الجغرافي للمستخدم. وبهذه الطريقة ، لا يمكن لخوادم مختلفة تحديث حالة التزامن ، ولكن من الجيد جدًا تعيين المحتوى الثابت. Anycast هي تقنية توجيه تقوم بتعيين مضيفات فعلية متعددة بعناوين IP. العيب الوحيد هو أن بروتوكول Anycast و TCP لم يتم تكييفه جيدًا ، لذلك نادرًا ما يتم استخدامه في هذه الحلول.تستخدم معظم خوادم DNS Anycast للحصول على عمليات البحث الفعالة والمتكافئة DNS.
3. يرسل المتصفح طلب HTTP إلى خادم الويبنظرًا لأن الصفحات الديناميكية مثل الصفحات الرئيسية على Facebook ، فسوف تنتهي صلاحيتها قريبًا وحتى في ذاكرة التخزين المؤقت للمتصفح بعد الافتتاح ، وليس هناك شك في أنهم لا يستطيعون القراءة منها.
لذلك ، سيرسل المتصفح طلبًا إلى الخادم حيث يوجد Facebook:
احصل على http://facebook.com/ http/1.1قبول: التطبيق/X-MS-Application ، Image/JPEG ، Application/XAML+XML ، [...]
عامل المستخدم: Mozilla/4.0 (متوافق ؛ MSIE 8.0 ؛ Windows NT 6.1 ؛ WOW64 ؛ [...]
قبول الترميز: gzip ، انحراف
الاتصال: الحفاظ على الحفل
المضيف: facebook.com
ملف تعريف الارتباط: datr = 1265876274-[...] ؛ locale = en_us ؛ lsd = ww [...] ؛ C_USER = 2101 [...]
احصل على هذا الطلب يحدد عنوان URL المراد قراءته: http://facebook.com/. يحدد المتصفح نفسه (رأس وكيل المستخدم ) ، ونوع نوع المقابل ( قبول وقبول الرسم ) الذي يريد قبوله. يتطلب رأس الاتصال من الخادم عدم إغلاق اتصال TCP للطلبات اللاحقة.
يحتوي الطلب أيضًا على ملفات تعريف الارتباط لاسم المجال المخزن بواسطة المتصفح. قد تعرف بالفعل أنه في طلبات الصفحات المختلفة ، تعد ملفات تعريف الارتباط القيم الرئيسية التي تتطابق مع حالة موقع الويب. وبهذه الطريقة ، ستخزن ملفات تعريف الارتباط اسم مستخدم تسجيل الدخول وكلمة المرور المعتمدة من الخادم وبعض إعدادات المستخدم. يتم تخزين ملفات تعريف الارتباط في العميل كمستند نصي وإرسالها إلى الخادم في كل مرة يطلبونها.
هناك العديد من الأدوات للنظر في طلب HTTP الأصلي وأدواته المقابلة. يفضل المؤلف استخدام Fiddler ، وبالطبع هناك أدوات أخرى مثل Firebug. يمكن أن تكون هذه البرامج مساعدة كبيرة عند تحسين موقع الويب.
بالإضافة إلى الحصول على الطلبات ، هناك نوع آخر من الطلبات المرسلة ، والذي يتم استخدامه غالبًا عند إرسال النماذج. أرسل طلبًا لتمرير معلماته عبر عنوان URL (على سبيل المثال: http://robozzle.com/puzzle.aspx؟id=85). إرسال الطلب يرسل معلماته بعد رأس جسم الطلب.
القطع مثل http://facebook.com/ هي أمر بالغ الأهمية. في هذه الحالة ، يمكن للمتصفح إضافة مائل بأمان. للحصول على عناوين مثل http://example.com/folderorfile ، لأن المتصفح لا يعرف ما إذا كان FolderorFile هو مجلد أو ملف ، فلا يمكنه إضافة القطع تلقائيًا. في هذا الوقت ، سيقوم المتصفح بالوصول مباشرة إلى العنوان دون خفض ، وسيستجيب الخادم لإعادة التوجيه ، مما يؤدي إلى مصافحة غير ضرورية.
4. استجابة إعادة توجيه دائمة لخدمة Facebookتعرض الصورة الاستجابة المرسلة إلى المتصفح بواسطة خادم Facebook:
تم نقل HTTP/1.1 301 بشكل دائمالسيطرة على ذاكرة التخزين المؤقت: خاص ، لا متجر ، بدون آثار ، يجب إعادة تقييمه ، بعد التحقق = 0 ،
قبل التحقق = 0
انتهاء صلاحية: السبت ، 01 يناير 2000 00:00:00 بتوقيت جرينتش
الموقع: http://www.facebook.com/
P3P: CP = DSP Law
Pragma: عدم وجود آذان
set-cookie: made_write_conn = deleted ؛ تنتهي = الخميس ، 12-FEB-2009 05:09:50 بتوقيت جرينتش ؛
المسار =/؛ المجال = .facebook.com ؛ httponly
نوع المحتوى: النص/html ؛ charset = UTF-8
x-cnection: إغلاق
التاريخ: الجمعة ، 12 فبراير 2010 05:09:51 بتوقيت جرينتش
طول المحتوى: 0
يستجيب الخادم لاستجابة إعادة توجيه دائمة 301 ، بحيث يزور المتصفح http://www.facebook.com/ بدلاً من http://facebook.com/.
لماذا يتعين على الخادم إعادة توجيه بدلاً من إرسال محتوى الويب مباشرة الذي يريد المستخدمون رؤيته؟ هناك العديد من الإجابات المثيرة للاهتمام لهذا السؤال.
أحد الأسباب المتعلقة بتصنيفات محرك البحث. كما ترى ، إذا كانت الصفحة تحتوي على عنوانان ، مثل http://www.igoro.com/ و http://igoro.com/ ، ستعتبر محركات البحث مواقعين ، مما يؤدي إلى انخفاض في روابط البحث لكل منهما وبالتالي خفض التصنيف. تعرف محركات البحث ما معنى 301 إعادة التوجيه الدائم ، لذلك سوف يصنفون الوصول إلى العناوين باستخدام www وبدون www ضمن نفس تصنيف الموقع.
شيء آخر هو أن استخدام عناوين مختلفة سيؤدي إلى أن يصبح الود ذاكرة التخزين المؤقت أسوأ. عندما يكون للصفحة عدة أسماء ، قد تظهر عدة مرات في ذاكرة التخزين المؤقت.
5. مسارات المستعرضة عنوان إعادة توجيهالآن ، يعرف المتصفح أن http://www.facebook.com/ هو العنوان الصحيح الذي سيتم الوصول إليه ، لذلك سوف يرسل طلبًا آخر:
احصل على http://www.facebook.com/ http/1.1قبول: التطبيق/X-MS-Application ، Image/JPEG ، Application/XAML+XML ، [...]
قبول اللغة: en-us
عامل المستخدم: Mozilla/4.0 (متوافق ؛ MSIE 8.0 ؛ Windows NT 6.1 ؛ WOW64 ؛ [...]
قبول الترميز: gzip ، انحراف
الاتصال: الحفاظ على الحفل
ملف تعريف الارتباط: lsd = xw [...] ؛ C_USER = 21 [...] ؛ x-referer = [...]
المضيف: www.facebook.com
معلومات الرأس لها نفس المعنى كما في الطلب السابق.
6. الخادم يتعامل مع الطلبيتلقى الخادم طلب الجلب ، ثم يقوم بمعالجة الاستجابة وإرجاعها.
يبدو أن هذه مهمة إلى الأمام على السطح ، ولكن في الواقع ، هناك الكثير من الأشياء المثيرة للاهتمام التي تحدث في الوسط - موقع ويب بسيط مثل مدونة المؤلف ، ناهيك عن موقع ويب مثل Facebook!
برنامج خادم الويب يتلقى برنامج Web Server (مثل IIS و Apache) طلب HTTP ثم يحدد ما يتم تنفيذ الطلبات للتعامل معه. معالجة الطلب هي برنامج يمكنه قراءة الطلب وإنشاء HTML للرد (مثل ASP.NET ، PHP ، Ruby ...).لإعطاء أبسط مثال ، يمكن تخزين معالجة المتطلبات في التسلسل الهرمي للملف الذي يرسم بنية عنوان الموقع. العنوان مثل http://example.com/folder1/page1.aspx سيقوم بتخطيط الملف /httpdocs/folder1/page1.aspx. يمكن تعيين برنامج خادم الويب ليكون معالجة الطلب المقابل يدويًا حسب العنوان ، بحيث يمكن أن يكون عنوان النشر الخاص بـ Page1.aspx http://example.com/folder1/page1.
طلب المعالجة يعالج الطلب طلب القراءة ومعلماته وملفات تعريف الارتباط. سوف تقرأ وتحديث بعض البيانات ويقول أن البيانات مخزنة على الخادم. معالجة المتطلبات ثم تنشئ استجابة HTML.تواجه جميع مواقع الويب الديناميكية صعوبة مثيرة للاهتمام - كيفية تخزين البيانات. سيحتوي نصف مواقع الويب الصغيرة على قاعدة بيانات SQL لتخزين البيانات. تخزين كميات كبيرة من البيانات و/أو مواقع الويب التي تمت زيارتها بكثافة يجب أن تجد بعض الطرق لتخصيص قاعدة البيانات لآلات متعددة. تتضمن الحلول: sharding (استنادًا إلى قيم المفاتيح الأساسية ، يتم نشر جداول البيانات إلى قواعد بيانات متعددة) ، وتكرار ، وقواعد بيانات مبسطة تستخدم الاتساق الدلالي الضعيف.
إن تفويض العمل إلى معالجة الدُفعات هو تقنية رخيصة للحفاظ على تحديث البيانات. على سبيل المثال ، يحتاج Facebook إلى تحديث خلاصات الأخبار في الوقت المناسب ، لكن وظائف الأشخاص الذين قد تعرفهم مع دعم البيانات تحتاج فقط إلى تحديث كل ليلة (يعتقد المؤلف أنه ، من غير المعروف كيفية تحسين الوظيفة). يمكن أن تتسبب تحديثات الوظائف في الدُفعات إلى أن بعض البيانات الأقل أهمية قديمة ، ولكن يمكن أن تجعل تحديثات البيانات أسرع وأكثر إيجازًا.
7. يرسل الخادم استجابة HTMLالصورة هي الاستجابة التي تم إنشاؤها وإعادتها بواسطة الخادم:
HTTP/1.1 200 OKالسيطرة على ذاكرة التخزين المؤقت: خاص ، لا متجر ، بدون آثار ، يجب إعادة تقييمه ، بعد التحقق = 0 ،
قبل التحقق = 0
انتهاء صلاحية: السبت ، 01 يناير 2000 00:00:00 بتوقيت جرينتش
P3P: CP = DSP Law
Pragma: عدم وجود آذان
ترميز المحتوى: GZIP
نوع المحتوى: النص/html ؛ charset = UTF-8
x-cnection: إغلاق
ترميز النقل: قطعة
التاريخ: الجمعة ، 12 فبراير 2010 09:05:55 بتوقيت جرينتش
2B3TN@[...]
حجم الاستجابة بأكمله هو 35 كيلو بايت ، يتم نقل معظمها كنوع النقطة بعد الفرز.
تخبر محطة ترميز المحتوى المتصفح أن جسم الاستجابة بأكمله مضغوط باستخدام خوارزمية GZIP. بعد إزالة ضغط كتلة النقطة ، يمكنك رؤية HTML المتوقعة على النحو التالي:<! doctype html public -// w3c // dtd xhtml 1.0 Strict // enhttp://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>
<html xmlns = http: //www.w3.org/1999/xhtml xml: lang = en
lang = en id = facebook class = no_js>
<head>
<meta http-equiv = content-type content = text/html ؛ charset = utf-8 />
<meta http-equiv = محتوى لغة المحتوى = en />
...
فيما يتعلق بالضغط ، تشرح معلومات الرأس ما إذا كانت هذه الصفحة مخزنة مؤقتًا ، وكيفية القيام بذلك إذا تم تخزينها مؤقتًا ، وما هي ملفات تعريف الارتباط التي يجب تعيينها (هذه النقطة غير موجودة في الرد السابق) ، ومعلومات الخصوصية ، إلخ.
يرجى ملاحظة أنه تم تعيين نوع المحتوى على النص/HTML في الرأس. يتيح الرأس للمتصفح تقديم محتوى الاستجابة في HTML بدلاً من تنزيله في نموذج الملف. سيقرر المستعرض كيفية تفسير الاستجابة بناءً على معلومات الرأس ، ولكنه سيأخذ في الاعتبار أيضًا عوامل أخرى مثل محتوى تمديد عنوان URL.
8. يبدأ المتصفح في عرض HTMLعندما لا يقبل المستعرض تمامًا جميع مستندات HTML ، فإنه يبدأ في عرض هذه الصفحة:
9. يرسل المتصفح للحصول على كائنات مضمنة في HTMLعندما يعرض المتصفح HTML ، يلاحظ العلامات التي تحتاج إلى الحصول على محتويات العناوين الأخرى. في هذا الوقت ، سيرسل المستعرض طلب الحصول على ملفات لاستعادة الملفات.
فيما يلي بعض عناوين URL التي نحتاج إلى إعادة الحصول عليها عند زيارة Facebook.com:
صورة http://static.ak.fbcdn.net/rsrc.php/z12e0/hash/8q2anwu7.gifhttp://static.ak.fbcdn.net/rsrc.php/zbs5c/hash/7hwy7at6.gif
... جدول نمط CSS
http://static.ak.fbcdn.net/rsrc.php/z448z/hash/2plh8s4n.css
http://static.ak.fbcdn.net/rsrc.php/zane1/hash/cvtutcee.css
... ملفات JavaScript
http://static.ak.fbcdn.net/rsrc.php/zemoa/hash/c8yzb6ub.js
http://static.ak.fbcdn.net/rsrc.php/z6r9l/hash/cq2lgbs8.js
...
هذه العناوين تمر جميعها من خلال عملية مماثلة لقراءة HTML. لذلك سيبحث المتصفح عن أسماء النطاقات هذه في DNS ، وإرسال الطلبات ، وإعادة التوجيه ، إلخ.
ولكن على عكس الصفحات الديناميكية ، تسمح الملفات الثابتة للمتصفح بتخزينها. قد لا تحتاج بعض الملفات إلى التواصل مع الخادم ويتم قراءتها مباشرة من ذاكرة التخزين المؤقت. تحتوي استجابة الخادم على معلومات الموعد النهائي للملفات الثابتة ، لذلك يعرف المتصفح المدة التي يجب أن يتم تخزينها مؤقتًا. أيضًا ، قد تحتوي كل استجابة على رأس ETAG (قيمة الكيان للمتغير المطلوب) الذي يعمل مثل رقم الإصدار. إذا لاحظ المستعرض أن نسخة ETAG الخاصة بالملف موجودة بالفعل ، فسيتم إيقاف نقل الملف على الفور.
حاول تخمين ما يمثله FBCDN.NET في العنوان؟ الإجابة الذكية هي شبكة توزيع محتوى Facebook. يستخدم Facebook شبكة توزيع المحتوى (CDN) لتوزيع الملفات الثابتة مثل الصور وجداول CSS وملفات JavaScript. لذلك ، سيتم دعم هذه الملفات في العديد من مراكز بيانات CDN حول العالم.
غالبًا ما يمثل المحتوى الثابت حجم النطاق الترددي للموقع ويمكن أيضًا نسخه بسهولة من خلال CDN. عادةً ما تستخدم مواقع الويب CDNs من طرف ثالث. على سبيل المثال ، يتم استضافة ملفات Facebook الثابتة بواسطة Akamai ، أكبر مزود CDN.
على سبيل المثال ، عندما تحاول ping static.ak.fbcdn.net ، يمكنك الحصول على استجابة من خادم Akamai.net معين. ومن المثير للاهتمام ، عندما تكون ping مرة أخرى ، قد يكون خادم الاستجابة مختلفًا ، مما يعني أن موازنة التحميل خلف الكواليس بدأت في العمل.
10. يرسل المتصفح طلبًا غير متزامن (AJAX)تسترشد الروح العظيمة لـ Web 2.0 ، يظل العميل على اتصال بالخادم بعد اكتمال عرض الصفحة.
خذ وظيفة الدردشة على Facebook كمثال ، وسوف تستمر في اتصال مع الخادم لتحديث حالة الأصدقاء المشرقة والرمادية في الوقت المناسب. من أجل تحديث حالة الصديق لهذه الآلهة ، سيرسل رمز JavaScript الذي تم تنفيذه في المتصفح طلبًا غير متزامن إلى الخادم. يتم إرسال هذا الطلب غير المتزامن إلى عنوان محدد ، وهو جلب أو طلب تم إرساله للبرنامج. أو في مثال Facebook ، يرسل العميل طلبًا إلى http://www.facebook.com/ajax/chat/buddy_list.php للحصول على معلومات الحالة التي عبر الإنترنت في صديقك.
عندما يتعلق الأمر بهذا النمط ، يجب أن نتحدث عن AJAX-JavaScript و XML. على الرغم من عدم وجود سبب واضح لاستجابة الخادم بتنسيق XML. اسمحوا لي أن أعطيك مثالا آخر. للطلبات غير المتزامنة ، سيعيد Facebook بعض قصاصات رمز JavaScript.
من بين أشياء أخرى ، تتيح لك أداة Fiddler رؤية الطلبات غير المتزامنة التي يتم إرسالها بواسطة متصفحك. في الواقع ، لا يمكنك فقط العمل بشكل سلبي كمشاهد لهذه الطلبات ، ولكن أيضًا مهاجمة بنشاط لتعديلها وإعادة تقديمها. من السهل جدًا أن تنخدع طلبات Ajax ، لكنها تجعل من مطوري الألعاب عبر الإنترنت الذين يسجلون الدرجات مكتئبين. (بالطبع ، لا تكذب على الآخرين مثل هذا ~)
توفر وظيفة دردشة Facebook حالة مثيرة للاهتمام من AJAX: دفع البيانات من الخادم إلى العميل. نظرًا لأن HTTP هو بروتوكول استجابة الطلب ، لا يمكن لخادم الدردشة إرسال رسائل جديدة إلى العميل. بدلاً من ذلك ، يتعين على العميل استطلاع جانب الخادم كل بضع ثوان لمعرفة ما إذا كان هناك أي أخبار جديدة.
الاستطلاع لهذه الحالات هو تقنية مثيرة للاهتمام لتقليل تحميل الخادم. إذا لم يكن للخادم أي رسائل جديدة عند استطلاعها ، فإنه يتجاهل العميل. عندما لم يتم توقيت الرسالة الجديدة من العميل بعد ، سيجد الخادم الطلب غير المكتمل وإرجاع الرسالة الجديدة إلى العميل كاستجابة.