
تم تطوير المشروع في 1337 مدرسة Khouribga الترميز.
المؤلفون: jamiafathiya & achrafelkhnissi & @abellaismail7
يرمز HTTP إلى بروتوكول نقل النص التشعبي ، وهو بروتوكول يستخدم لنقل النص التشعبي. هذا يثير سؤالين: ما هو البروتوكول ، وما هو النص التشعبي؟ في هذا السياق ، يعد البروتوكول نظامًا للقواعد يمكّن الاتصال بالمعلومات بين الكيانات المختلفة ، مثل أجهزة الكمبيوتر. النص التشعبي هو مصطلح قديم للنص المعروض على شاشة الكمبيوتر التي تحتوي على ارتباطات تشعبية إلى نص آخر ، أي مستندات الويب. لذلك ، يشير بروتوكول نقل النص التشعبي إلى مجموعة القواعد والخوادم والمتصفحات المستخدمة لنقل مستندات الويب ذهابًا وإيابًا.
يسمح HTTP بالجلسات ، ويتم مشاركة الحالات المخزنة بين المتصفح والخادم. إذا كان الزائر يتصفح معرض صور ، فيمكن للمتصفح والخادم تبادل المعلومات حول موقع الزائر في التسلسل عن طريق تمرير المعلومات ذهابًا وإيابًا في شكل ملفات تعريف الارتباط. عند إعادة تحميل الصفحة ، يرسل المتصفح ملف تعريف ارتباط إلى الخادم يشير إلى آخر الموضع الذي تمت زيارته ، مما يتيح للمشاهد استئنافًا من تلك النقطة. هذا يعني أنه على الرغم من أن HTTP عديمة الجنسية ، إلا أنها ليست بلا جلسة.
| شرط | تعريف |
|---|---|
| متصفح | تطبيق يستخدم للوصول والتنقل بين مستندات HTML. |
| وكيل المستخدم | تطبيق يعمل نيابة عن المستخدم ، وعادة ما يكون متصفح. |
| TCP | قصير لبروتوكول التحكم في الإرسال ، أحد بروتوكولات الإنترنت الرئيسية التي تستخدمها الويب العالمية والبريد الإلكتروني و FTP والإدارة عن بُعد. |
| IP | قصير لبروتوكول الإنترنت. يتم استخدام IP لنقل البيانات بين أجهزة الكمبيوتر عبر الشبكة. يحتوي كل جهاز متصل بالإنترنت على عنوان IP. |
| عنوان URL | اختصار لموقع الموارد الموحد ، عنوان يشير إلى مورد على الويب. |
| DNS | قصير لخادم اسم المجال. تقوم DNS كتالوجات جميع عناوين URL لاسم المجال وتشير إليها إلى عناوين IP للخوادم. |
| الموارد | الملف أو الملفات المتوفرة على خادم عند اتباع عنوان URL. |
| الخادم | جهاز كمبيوتر على الإنترنت يقوم بتشغيل بعض أشكال تخزين البيانات ومشاركة التطبيق ، والأكثر شيوعًا تطبيق خادم الويب. |
| الوكيل | خدمة البرمجيات أو الأجهزة التي تعمل كشخص متوسط بين العملاء والخوادم. |
| أزواج الطلب-الاستجابة | يتواصل العملاء والخوادم عبر HTTP باستخدام أزواج الاستجابة للطلب. يتم إرسال طلب ، ويتم إرجاع الرد. |
| رأس | تستخدم الطلبات والاستجابات رؤوس HTTP لتمرير المعلومات ذهابًا وإيابًا. |
| طريقة طلب HTTP/الفعل | يحتوي كل طلب HTTP على طريقة ، تُعرف أيضًا باسم الفعل ، والتي تشرح الإجراء الذي يريد المرسل القيام به على المورد (على سبيل المثال ، احصل ، وضع ، حذف). |
| رمز استجابة الحالة | رمز رقمي في نطاق 100 إلى 500 يصف نوع الاستجابة التي أرسلها الخادم إلى العميل. |
| مخبأ | طريقة لتخزين البيانات على العميل أو الخادم لتسريع الأداء. |
| عديمي الجنسية | HTTP عديمة الجنسية ، وهذا يعني أن كل طلب والاستجابة فريدة من نوعها ، ولا يتم تخزين أي حالة. |
| ملف تعريف الارتباط | تم تمرير سلسلة من البيانات ذهابًا وإيابًا بين العميل والخادم لإنشاء جلسة مفعمة بالحيوية. |
| حصة | يمكن للعملاء والخوادم مشاركة المعلومات حول الحالات عن طريق تمرير المعلومات ذهابًا وإيابًا ، وإنشاء جلسة. |


| طريقة | وصف | نجاح | فشل |
|---|---|---|---|
| يحصل | احصل على المورد المحدد ، إذا كان ذلك متاحًا | 200 حسنا | 404 لم يتم العثور عليها |
| بريد | قم بإنشاء مورد جديد وأضفه إلى مجموعة | 201 خلق | 401 غير مصرح به ، 409 صراع ، 404 لم يتم العثور عليها |
| يضع | قم بتحديث معرف Singleton الحالي أو الهوية | 200 حسنا | 401 غير مصرح به ، 404 غير موجود ، 405 طريقة غير مسموح بها |
| رقعة | تعديل معرف أو معرف القائم على المفرد الحالي | 200 حسنا | 401 غير مصرح به ، 404 غير موجود ، 405 طريقة غير مسموح بها |
| يمسح | حذف Singleton المستند إلى موارد أو معرف (لا يمكنك حذف مجموعة من الموارد) | 200 حسنا | 401 غير مصرح به ، 404 لم يتم العثور عليها |
| خيار | احصل على الخيارات المتاحة من هذا المورد | 200 حسنا | - |
| رأس | احصل على رؤوس الاستجابة فقط من المورد | 200 حسنا | 404 لم يتم العثور عليها |
يتضمن هذا القسم وصف الوظائف اللازمة لإنشاء خادم ويب.
int getaddrinfo ( const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node : اسم المضيف أو عنوان IP للخادم.
node NULL ، يتم استخدام عنوان IP للمضيف المحلي. service : رقم منفذ الخادم.
service NULL ، فسيتم استخدام رقم المنفذ الافتراضي للخدمة المطلوبة في hints . hints : مؤشر إلى struct addrinfo الذي يحدد معايير لتحديد هياكل عنوان المقبس التي يتم إرجاعها في القائمة التي تم توجيهها إلى res .
hints NULL ، فإن القائمة التي تم إرجاعها تتضمن عناوين المقبس لجميع أنواع المقبس ، لجميع عائلات البروتوكول التي تدعمها عائلة العنوان في العقدة المحددة ، وعنوان المضيف المحلي.struct addrinfo :ai_family : عائلة العنوان. يتم تعريف الثوابت التالية لحقل ai_family :AF_INET : بروتوكولات الإنترنت IPv4AF_INET6 : بروتوكولات الإنترنت IPv6AF_UNIX : الاتصالات المحليةAF_UNSPEC : غير محددai_socktype : نوع المقبس. يتم تعريف الثوابت التالية لحقل ai_socktype :SOCK_STREAM : يوفر تدفقات بايت متسلسلة وموثوقة في اتجاهين. قد يتم دعم آلية نقل البيانات خارج النطاق.SOCK_DGRAM : يدعم بيانات البيانات (غير متصلة ، غير موثوق بها بأقصى طول ثابت).SOCK_RAW : يوفر الوصول إلى بروتوكول الشبكة الخام.SOCK_RDM : يوفر طبقة بيانات موثوقة لا تضمن الطلب.SOCK_SEQPACKET : يوفر طبقة حزمة متسلسلة لا تضمن الطلب.ai_protocol : بروتوكول المقبس. يتم تعريف الثوابت التالية لحقل ai_protocol :IPPROTO_TCP : بروتوكول التحكم في الإرسالIPPROTO_UDP : بروتوكول بيانات المستخدمIPPROTO_RAW : واجهة بروتوكول الخامIPPROTO_IP : بروتوكول الإنترنتIPPROTO_ICMP : بروتوكول رسالة التحكم في الإنترنتIPPROTO_IGMP : بروتوكول إدارة مجموعة الإنترنتIPPROTO_IPV4 : إصدار بروتوكول الإنترنت 4IPPROTO_IPV6 : بروتوكول الإنترنت 6 res : مؤشر إلى قائمة مرتبطة بواحد أو أكثر من هياكل struct addrinfo التي تحتوي على معلومات استجابة حول المضيف.
قيمة الإرجاع: عند النجاح ، يتم إرجاع الصفر. عند الخطأ ، يتم إرجاع -1 ، ويتم تعيين errno بشكل مناسب.
struct addrinfo :
struct addrinfo {
int ai_flags; // input flags
int ai_family; // socket protocol family
int ai_socktype; // socket type
int ai_protocol; // protocol for socket
socklen_t ai_addrlen; // socket address length
struct sockaddr *ai_addr; // socket address
char * ai_canonname; // service name
struct addrinfo *ai_next; // next item in the list
}; int socket ( int domain, int type, int protocol);domain : مجال الاتصال ، الذي يحدد دلالات الاتصال وعائلة البروتوكول لاستخدامه. يتم تعريف الثوابت التالية لحجة domain :AF_INET : بروتوكولات الإنترنت IPv4AF_INET6 : بروتوكولات الإنترنت IPv6AF_UNIX : الاتصالات المحليةAF_UNSPEC : غير محددtype : دلالات الاتصال. يتم تعريف الثوابت التالية لنوع type :SOCK_STREAM : يوفر تدفقات بايت متسلسلة وموثوقة في اتجاهين. قد يتم دعم آلية نقل البيانات خارج النطاق.SOCK_DGRAM : يدعم بيانات البيانات (غير متصلة ، غير موثوق بها بأقصى طول ثابت).SOCK_RAW : يوفر الوصول إلى بروتوكول الشبكة الخام.SOCK_RDM : يوفر طبقة بيانات موثوقة لا تضمن الطلب.SOCK_SEQPACKET : يوفر طبقة حزمة متسلسلة لا تضمن الطلب.protocol : البروتوكول المراد استخدامه مع المقبس. عادةً ما يوجد بروتوكول واحد فقط لدعم نوع مقبس معين داخل عائلة بروتوكول معينة ، وفي هذه الحالة يمكن تحديد protocol على أنه 0. يتم تعريف الثوابت التالية لحجة protocol :IPPROTO_TCP : بروتوكول التحكم في الإرسالIPPROTO_UDP : بروتوكول بيانات المستخدمIPPROTO_SCTP : بروتوكول نقل التحكم في الدفقIPPROTO_TIPC : اتصال شفاف بين العملياتIPPROTO_RAW : حزم IP الخامerrno بشكل مناسب. int bind ( int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd : واصف ملف المقبس ليكون ملزمًا.addr : مؤشر إلى بنية sockaddr التي تحتوي على العنوان المراد ربطه بالمقبس. يعتمد طول وتنسيق العنوان على عائلة العنوان في المقبس.addrlen : حجم ، في بايت ، من بنية العنوان التي أشار إليها وسيطة addr .errno بشكل مناسب. int listen ( int sockfd, int backlog);sockfd : واصف الملف للمقبس المراد الاستماع إليه.backlog : الحد الأقصى للطول الذي قد ينمو فيه قائمة انتظار الاتصالات المعلقة لـ sockfd .errno بشكل مناسب. int accept ( int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd : واصف الملف للمقبس المراد قبوله.addr : مؤشر إلى بنية sockaddr . تمتلئ هذا الهيكل بعنوان مقبس الأقران ، كما هو معروف لطبقة الاتصالات. يتم تحديد التنسيق الدقيق للعنوان الذي تم إرجاعه بواسطة عائلة عنوان المقبس. عندما يكون العنوان الذي تم إرجاعه طويلًا جدًا بحيث لا يتلاءم مع بنية sockaddr الموردة ، يتم اقتطاع العنوان.addrlen : مؤشر إلى كائن socklen_t والذي يحدد في الإدخال طول بنية sockaddr الموردة ، وعلى الإخراج يحدد طول العنوان المخزن.errno بشكل مناسب. ssize_t recv ( int sockfd, void *buf, size_t len, int flags);sockfd : واصف الملف للمقبس المراد استلامه.buf : مؤشر إلى مخزن مؤقت حيث يجب تخزين الرسالة.len : طول بايت من المخزن المؤقت التي أشار إليها حجة buf .flags : يحدد نوع استقبال الرسائل. يتم تشكيل القيمة من خلال الصفر المنطقي أو أكثر من القيم التالية:MSG_OOB : معالجة بيانات خارج نطاق النطاق.MSG_PEEK : نظرة خاطفة على الرسائل الواردة.MSG_WAITALL : انتظر طلبًا كاملاً ، ما لم يكن المقبس غير محظور.MSG_DONTWAIT : تمكين عملية عدم الحظر ؛ إذا كانت العملية ستحظر ، تفشل المكالمة مع الخطأ EAGAIN أو EWOULDBLOCK .MSG_NOSIGNAL : لا تنشئ SIGPIPE عند الكتابة إلى أنبوب بدون أحد لقراءته.recv() إرجاع 0. عند الخطأ ، يتم إرجاع -1 ، ويتم تعيين errno بشكل مناسب. ssize_t send ( int sockfd, const void *buf, size_t len, int flags);sockfd : واصف الملف للمقبس المراد إرساله.buf : مؤشر إلى مخزن مؤقت يحتوي على الرسالة التي سيتم إرسالها.len : طول بايت الرسالة التي أشار إليها حجة buf .MSG_OOB : معالجة بيانات خارج نطاق النطاق.MSG_DONTROUTE : التوجيه الالتفافية ، استخدم الواجهة المباشرة.MSG_DONTWAIT : تمكين عملية عدم الحظر ؛ إذا كانت العملية ستحظر ، تفشل المكالمة مع الخطأ EAGAIN أو EWOULDBLOCK .MSG_NOSIGNAL : لا تنشئ SIGPIPE عند الكتابة إلى أنبوب بدون أحد لقراءته.errno بشكل مناسب. عام
طلب HTTP
استجابة HTTP
CGI
اختبار الإجهاد