मैं एक पूर्ण स्टैक ऐप बनाने के लिए रेल/जेएस/एचटीएमएल/सीएसएस पर रुबी में प्रोग्राम और विकास कर सकता हूं। हालांकि, HTTP अनुरोध/प्रतिक्रिया चक्र की मेरी समझ में छेद हैं। क्या निम्नलिखित अंक सही हैं?स्थानीय वेब सर्वर चलाने का क्या अर्थ है?
- यदि मैं रेल ऐप बनाता हूं, और कमांड लाइन प्रकार
rails server
पर मुझे स्थानीय सर्वर मिलता है, जिसे मैं अनुरोध कर सकता हूं। यदि मैं ब्राउज़र खोलता हूं, तोlocalhost:3000
टाइप करें, और एंटर दबाएं, मैं स्थानीय सर्वर पर HTTP अनुरोध कर रहा हूं। - रेल डिफ़ॉल्ट रूप से वेब ब्राउजर नामक वेब सर्वर का उपयोग करते हैं, हालांकि थिन, प्यूमा और यूनिकॉर्न जैसे अन्य लोग हैं। ये सॉफ़्टवेयर के सभी टुकड़े हैं, और उन्हें वेब सर्वर क्या बनाता है यह तथ्य है कि सॉफ़्टवेयर HTTP अनुरोधों को संसाधित करने के लिए कार्यक्षमता लागू करता है।
- जब मैं स्थानीय वेब सर्वर चलाता हूं, तो इसका मतलब है कि मेरा कंप्यूटर सॉफ़्टवेयर के इन टुकड़ों में से एक चला रहा है जो HTTP अनुरोधों को सुनता है।
उपरोक्त क्या है इसका मतलब है "स्थानीय वेब सर्वर चलाने के लिए"?
- मैंने "स्थानीय वेब सर्वर चलाने" के तरीकों के अन्य उदाहरण देखे हैं। प्रोजेक्ट निर्देशिका में
npm install -g http-server
चलाने के लिए, और फिरlocalhost:8080
पर नेविगेट करना है। क्या यह एक ऐसा सॉफ़्टवेयर भी है जो पोर्ट 8080 पर HTTP अनुरोधों को चलाना शुरू करता है और स्वीकार करता है? - रूबी कमांड लाइन पर, रैक मणि इंस्टॉल करें:
gem install rack
। फिर एक नई रूबी फ़ाइल हमrequire 'rack'
में, एक वेब सर्वर शुरू:
Rack::Server.start({ app: MySimpleApp, port: 3000 })
हम तो एक वेब अनुप्रयोग MySimpleApp
कि रैक-संगत (उद्देश्य यह है कि call
विधि का जवाब) है परिभाषित कर सकते हैं:
class MySimpleApp
def self.call
(...)
end
end
तो अब जब हम अपने ब्राउज़र में स्थानीयहोस्ट में नेविगेट करते हैं: 3000, MySimpleApp निष्पादित किया जाता है। क्या रैक बस इसे डिफ़ॉल्ट वेबब्रिक सर्वर चला रहा है? क्या उपर्युक्त आदेश केवल स्थानीय वेब सर्वर चलाते हैं और परिभाषित करते हैं कि HTTP अनुरोध कब होता है (MySimpleApp निष्पादित करें)?
पहले अनुच्छेद के साथ सावधान: HTTP * देखो * जैसा कि यह टेक्स्ट-आधारित था। लेकिन यह वास्तव में एक बाइनरी प्रोटोकॉल है: यह ऑक्टेट्स पर चलता है, चरित्र नहीं। – DaSourcerer
@DaSourcerer मुझे यकीन नहीं है कि यह एक भेद है जो 7-बिट ASCII या एक्सटेंशन [अन्य प्रारूपों को एन्कोड करें] (https://tools.ietf.org/html/rfc5987) पर आधारित प्रोटोकॉल के लिए महत्वपूर्ण है। बाइट्स और वर्ण समान हैं जब तक अन्यथा निर्दिष्ट नहीं किया जाता है। फ़्रेमिंग सादा-पाठ है। Payloads * बाइनरी हो सकता है। – tadman
इस पर एक लड़ाई शुरू करने के लिए नहीं जा रहा है, लेकिन हाँ, अभ्यास में सहनशील रूप से दिखाई देने पर, यह महत्वपूर्ण है। 7 बिट एएससीआईआईआई में फिट करने वाले कोडवार्ड और डिलीमीटर वास्तव में इंटरऑपरेबिलिटी मुद्दों को रोकने और प्रोटोकॉल को पढ़ने के लिए अनुमति देने का एक तरीका है। ओह, और कुछ शीर्षलेख आरएफसी 5987 से पहले पेश किए गए कच्चे यूटीएफ 8 पेलोड की अनुमति देते हैं। 'कुकी 2' उनमें से एक है, मुझे लगता है। – DaSourcerer