HTTP सर्वर कैसे लिखें?


17

जैसा कि शीर्षक कहता है, मैं एक HTTP सर्वर लिखना चाहूंगा। मेरा सवाल यह है कि मैं यह कैसे करूँ? मुझे पता है कि यह बहुत सामान्य और बहुत "उच्च स्तर" लगता है, लेकिन मेरे पागलपन की एक विधि है। इस सवाल का जवाब होना चाहिए, मेरा मानना ​​है, भाषा अज्ञेय; अर्थ, चाहे मैं किसी भी भाषा का उपयोग करूं (जैसे, C, C ++, Java, आदि) का उत्तर समान होना चाहिए। मेरे पास एक सामान्य विचार है कि यह कैसे काम करना चाहिए:

  1. पोर्ट 80 पर एक सॉकेट खोलें।
  2. अनुरोध करने के लिए ग्राहक की प्रतीक्षा करें।
  3. अनुरोध पढ़ें (यानी, यह व्यक्ति पृष्ठ "contact-us.html") चाहता है।
  4. "Contact-us.html" खोजें और पढ़ें।
  5. Html शीर्ष लेख भेजें, फिर "contact-us.html" की सामग्री भेजें
  6. किया हुआ

जैसा मैंने कहा, मेरा मानना ​​है कि यह प्रक्रिया है, लेकिन मैं 100% निश्चित नहीं हूं। यह मुझे मेरे सवाल के दिल में ले जाता है। किसी व्यक्ति को यह जानकारी कैसे या कहां से मिलती है?

क्या होगा अगर मैं सिर्फ एक HTTP सर्वर लिखना नहीं चाहता था, क्या होगा अगर मैं एक FTP सर्वर, एक चैट सर्वर, एक छवि दर्शक, आदि लिखना चाहता था? किसी व्यक्ति को एक कार्यशील HTTP सर्वर बनाने के लिए आवश्यक सटीक चरणों / प्रक्रिया का पता कैसे चलता है?

एक सहकर्मी ने मुझे html हैडर के बारे में बताया, इसलिए मुझे उसके बिना यह पता होता। उन्होंने प्रत्येक अनुरोध को एक नए धागे को सौंपने के बारे में भी कुछ कहा। क्या कोई बड़ी किताब है कि चीजें कैसे काम करती हैं? क्या HTTP सर्वर होने के लिए कुछ मैनुअल है?

मैंने "कैसे एक HTTP सर्वर काम करता है" को टालने की कोशिश की, लेकिन मुझे जो जवाब मिला वह आपके औसत जो की ओर बढ़ाया गया था, न कि किसी ऐसे व्यक्ति की ओर जो एचटीटीपी सर्वर को प्रोग्राम करना चाहता है।


12
RFC2616 में आपके लिए HTTP प्रोटोकॉल के सभी नॉटी ग्रिटि विवरण होने चाहिए। RFC959 एफ़टीपी के लिए एक ही बात है।
माइक

3
वैकल्पिक रूप से (या इसके अतिरिक्त), देखें कि मौजूदा सरल HTTP सर्वर कैसे लागू होते हैं। एक से अधिक, कि आपको एक विचार देना चाहिए कि संरचनाएं क्या समझती हैं।
माइकल बोर्गवर्ड

माइकल बोर्गवर्ड - मैं ऐसा करूंगा, लेकिन मेरे पास दूसरे कोड को देखने पर जो मैंने देखा है उसे कॉपी करने की प्रवृत्ति है। मैं इस स्वच्छ में जाने की उम्मीद कर रहा था, यह देखने के लिए कि क्या मैं इसे "धोखा" के बिना अपने दम पर कर सकता हूं।
ब्रायन

आपका वेब खोज वाक्यांश गलत है, यह उपयोगकर्ताओं पर लक्षित है, यही कारण है कि आपको औसत जो सामान मिल रहा है। उपयोग करें: "HTTP सर्वर कैसे विकसित करें" इसके बजाय, यह बेहतर दर्शाता है कि आप क्या देख रहे हैं। मैंने बस इसे Google के साथ आज़माया और संदर्भों का एक पूरा पृष्ठ मिला, जो इस सामान को समझाता है
gnat

उदाहरण के लिए, अपाचे टोमैट के लिए अन्य कार्यान्वयन की समीक्षा पर विचार करें। यह संभवतः आप जितना चाहते हैं उससे अधिक करता है, लेकिन यह समस्या को हल करने के लिए एक तकनीक का प्रदर्शन करेगा।
द्विवार्षिक

जवाबों:


19

RFC2616 , ल्यूक का उपयोग करें !

आप HTTP / 1.1 पर RFC 2616 पढ़ते हैं , और आप इसके लिए जाते हैं।

यह वास्तव में इंजीनियरिंग स्कूल में मेरे 3 साल में एक परियोजना थी, और यह परियोजना विवरण बहुत सुंदर है।

उपकरण

आपके उपकरण हैं:

  • बुनियादी नेटवर्किंग सामान (सॉकेट प्रबंधन, बाइंडिंग, पतों को समझें),
  • I / O धाराओं की अच्छी समझ,
  • RFC के कुछ छायादार हिस्से (माइम-प्रकार मजेदार हैं) पाने के लिए बहुत धैर्य।

मजेदार बातें

अतिरिक्त मज़ा के लिए विचार करने के लिए चीजें:

  • प्लग-इन आर्किटेक्चर को जोड़ने के लिए CGI / mod सपोर्ट,
  • विन्यास फाइल, अच्छी तरह से, कई चीजों के लिए,
  • स्थानान्तरण का अनुकूलन कैसे करें, इस पर बहुत सारे प्रयोग
  • सीपीयू और मेमोरी के मामले में लोड को कैसे प्रबंधित करें, और एक डिस्पैच मॉडल (बड़ी वसा यहां तक ​​कि लूप, एकल स्वीकार प्रेषण, बहु-धागा, बहु-प्रक्रिया, आदि ...) को देखने के लिए बहुत सारे प्रयोग।

मज़े करो। यह देखने में बहुत ही मस्त चीज़ है।

अन्य (सरल) सुझाव

  • FTP क्लाइंट / सर्वर (ज्यादातर RFC959 लेकिन पुराने संस्करण हैं और कुछ एक्सटेंशन भी हैं)
  • आईआरसी क्लाइंट / सर्वर (ज्यादातर RFC1459 , लेकिन एक्सटेंशन हैं)

वे पहले से निपटने के लिए आसान कर रहे हैं, और उनके RFC पचाने के लिए बहुत आसान है (ठीक है, IRC एक कुछ अजीब भागों है, लेकिन एफ़टीपी एक बहुत स्पष्ट है)।

भाषा विकल्प

बेशक, कुछ कार्यान्वयन विवरण उस भाषा पर अत्यधिक निर्भर होंगे और जिसे आप इसे लागू करने के लिए उपयोग करते हैं। मैंने C में सभी से संपर्क किया, लेकिन मुझे यकीन है कि यह अन्य भाषाओं में भी मज़ेदार हो सकता है (ठीक है, शायद उतना मज़ा नहीं है, लेकिन फिर भी मज़ेदार है)।


हाँ मुझे स्कूल में प्रोजेक्ट के तौर पर भी ऐसा करना पड़ा। यह आश्चर्यजनक रूप से मज़ेदार है और आपको "औद्योगिक ताकत" वेब सर्वर के लिए सराहना मिलती है।
एवीकाटोस

प्रोटोकॉल के कार्यान्वयन का अधिकार प्राप्त करना एक हिस्सा है; सर्वर का आर्किटेक्चर एक और है ...
tdammers

@tdammers: RFC बहुत अच्छे हैं, यदि आप उनका अनुसरण करते हैं, तो आपके पास पहले से ही एक सभ्य नंगेपन का खाका है। आपके पास अभी भी अपने आर्किटेक्चर डिज़ाइन के लिए बहुत सारे कमरे हैं, लेकिन यह एक बहुत अच्छा और निर्देशात्मक कल्पना है।
जाइलम ha ’at१३

@ हाइलम: हाँ और नहीं। कल्पना को लागू करना आपको एक व्यक्तिगत कार्यकर्ता देता है, लेकिन आपको अभी भी इस कार्यकर्ता को एक बड़ी तस्वीर में एम्बेड करने की आवश्यकता है - आप समवर्ती अनुरोधों को संभालने के लिए कैसे ध्यान रखते हैं? आप उपयोगी सामग्री कैसे प्रदान करते हैं? आप राज्य कहाँ रखते हैं?
तदमर्स

@ दोस्त: मुझे: You still have lots of room for your architecture design, but it's a pretty good and directive spec.आप yes and no:। मुझे लगता है कि हम पहले ही आरएफसी से कम हो गए थे, सब कुछ नहीं था। और मुझे लगता है कि यह ओपी पर निर्भर है तो इन चीजों की खोज करने के बजाय उन्हें सीधे इंगित करने की तुलना में अधिक है जो मैंने "अतिरिक्त विचार" अनुभागों और अन्य चीजों में किया है। यह मस्ती का हिस्सा है।
जाइलम ha ’११ को १३:१३

2

इंटरनेट पर उपयोग किए जाने वाले प्रत्येक प्रोटोकॉल को RFC नामक एक या अधिक सार्वजनिक दस्तावेजों में निर्दिष्ट किया जाता है। सभी मौजूदा RFC http://www.rfc-editor.org/ पर पाए जा सकते हैं , जिसमें एक अच्छा खोज कार्य भी है।

HTTP प्रोटोकॉल (संस्करण 1.1), उदाहरण के लिए, RFC2616 में निर्दिष्ट है और FTP प्रोटोकॉल RFC959 में निर्दिष्ट है ।

विनिर्देश के अनुसार, RFC, मेरी राय में, बहुत अच्छी तरह से पठनीय है।


मैं वास्तव में इस RFC के साथ भ्रमित हूँ। क्या वे कभी HTTP RFC को अपडेट करेंगे? उपरोक्त उत्तर में, एक टिप्पणी है जो बताती है In 2014, RFC2616 was replaced by multiple RFCs (7230-7237).। तो, अगर वे मौजूद हैं तो अपडेटेड RFC को कैसे खोजेंगे? क्या मुझे Obsoleted byसूची की जांच करनी चाहिए ?
SkrewEverything 20

@SkrewEverything: RFC अपडेट नहीं होते हैं, लेकिन उन्हें नए RFC द्वारा बदल दिया जाता है। आप "Obsoleted by" लिंक का अनुसरण करके वास्तव में नए पाते हैं।
बार्ट वैन इनगेन शानौ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.