ما هو خادم الويب؟
عندما يحتاج تطبيق (عميل) إلى مورد معين، يمكنه طلب المورد من خلال HTTP إلى الخادم؛ والخادم الذي يوفر المورد هو خادم ويب
1.1 أول تجربة مع الخادم
1.2 طريقتان لإنشاء خادم
1.3 كائن الطلب
يقوم كائن الطلب بتغليف جميع المعلومات التي يمررها العميل إلى خادمنا.
عنوان URL لهذا الطلب، يحتاج الخادم إلى إجراء معالجة مختلفة وفقًا لعناوين URL المختلفة
، مثل GET وطلب POST الوارد تختلف المعلمات وطرق المعالجة؛
وستحمل رؤوس هذا الطلب أيضًا بعض المعلومات، مثل معلومات العميل وتنسيق تلقي البيانات وتنسيقات التشفير المدعومة وما إلى ذلك...
الطلب العادي:
عند إرسال طلب، سيطلب العميل بيانات مختلفة، ثم سيتم تمرير عناوين طلب مختلفة. يحتاج الخادم إلى تقديم استجابات مختلفة بناءً على عناوين الطلب المختلفة.
إذا كان عنوان طلب المستخدم يحمل أيضًا بعض المعلمات الإضافية، فكيف يجب علينا تحليلها؟
يمكننا استخدام وحدة URL.
من بينها، توفر وحدة url أدوات مساعدة لمعالجة عناوين URL وتحليلها.
Import url const url = require('url')
لنفترض أن بيانات طلبنا هي:
نتيجة تحليل وحدة التحكم لعنوان url هي:
من بينها، اسم المسار هو المسار الأخير الذي نحتاج إلى الحصول عليه. هدفنا هو الحصول على اسم المستخدم وكلمة المرور بشكل منفصل في الاستعلام.
استيراد وحدة سلسلة الاستعلام const qs = require('querystring');
const http = require("http")const url = require('url')const qs = require('querystring')// 1. إنشاء خادم const server = http .createServer((req, res) => { // استخدم الوحدة المدمجة const{ pathname,query } = url.parse(req.url) إذا (اسم المسار === '/ تسجيل الدخول'){ console.log(query); console.log(qs.parse(query)); const { اسم المستخدم وكلمة المرور } = qs.parse(query) console.log(اسم المستخدم,كلمة المرور); res.end('ينتهي الطلب') }});// 2. قم بتعيين رقم المنفذ وابدأ الخادم server.listen(8888,'0.0.0.0',()=>{ console.log("بدأ الخادم بنجاح ~");})
في المواصفات المريحة (أسلوب التصميم)، يجب أن نستخدم طرق طلب مختلفة لإضافة البيانات وحذفها وتعديلها والتحقق منها:
يمكننا إجراء معالجة مختلفة من خلال الحكم على طرق الطلب المختلفة
افترض أن ما يلي هو بيانات طلب JSON الخاصة بنا في النص -> كيفية جعل خادمنا يحصل على اسم المستخدم وكلمة المرور؟
نوع المحتوى هو نوع البيانات الواردة في هذا الطلب:
** المحتوى -length: **حجم الملف
الذي يظل حيًا وطوله:
**accept-encoding: ** إبلاغ الخادم، العميل بتنسيق ضغط الملفات الذي يدعمه العميل، على سبيل المثال، يمكن لملفات js استخدام ترميز gzip، المطابق لملفات .gz
**قبول:** إبلاغ الخادم بأن العميل يمكنه قبول نوع تنسيق الملف
*
؛*user-agent:** معلومات متعلقة بالعميل؛
1.4 كائن الاستجابة
إذا أردنا الرد على العميل ببيانات النتيجة، يمكننا القيام بذلك بطريقتين:
.
رمز حالة Http (رمز حالة Http) هو رمز رقمي يستخدم لتمثيل حالة استجابة Http:
الفئة | السبب عبارة | |
---|---|---|
1xx | إعلامية | تتم معالجة الطلب المقبول |
2xx | نجاح | تمت معالجة الطلب بشكل طبيعي |
إعادة توجيه | 3xx | مطلوب إجراء إضافي لإكمال الطلب |
4xx | خطأ العميل | خطأ العميل خطأ في الطلب، لا يمكن للخادم معالجة الطلب |
5xx | خطأ في الخادم (خطأ في الخادم) | الخادم خطأ في معالجة الطلب |
رموز الاستجابة الشائعة:
رمز الحالة | وصف | الحالة | |
---|---|---|---|
200 | موافق | تم نجاح الطلب. يستخدم بشكل عام لطلبات GET وPOST. | |
400 | طلب سيئ هو | خطأ في بناء الجملة في طلب العميل. | |
401 | طلبغير مصرح به | يتطلب مصادقة المستخدم | |
. | 403 | محظور | 404 |
غير | موجود. | لا يمكن للخادم معالجة الطلب بناءً على طلب العميل. من خلال هذا الرمز، يمكن لمصممي مواقع الويب إعداد صفحة مخصصة بعنوان "لا يمكن العثور على المورد الذي طلبته". | |
500 | خطأ داخلي | في الخادم ولا يمكن إكمال الطلب | |
503 | بسبب | التحميل الزائد أو صيانة النظام ، الخادم غير قادر مؤقتًا على معالجة طلب العميل. يمكن تضمين طول التأخير في رمز الحالة المعين في رأس "إعادة المحاولة بعد" الخاص بالخادم |
:
بإرجاع معلومات الرأس. هناك طريقتان رئيسيتان: