वर्तमान तकनीकी युग में डॉट नेट टेक्नोलॉजी के अंतर्गत ASP.NET MVC और ASP.NET Core जैसे टेक्नोलॉजी का प्रयोग होता है जबकि एक जमाना था जब ASP टेक्नोलॉजी का उपयोग वेबसाइट बनाने में बहुत ज्यादा होता था। हम क्लासिक ASP के बारे में इस लेख में समझेंगे। आज भी क्लासिक ASP की बहुत सारी चीजे समझने लायक है। ASP पेज इंटरप्रेट किया जाता है जबकि asp.net के अंतर्गत वेब पेज का कंपाइलेशन होता है, हम इन सब चीजों को आगे देखेंगे, पहले हम ASP को समझते हैं।
इस लेख में हम क्लासिक ASP एक्टिव सर्वर पेज के बारे में समझेंगे कि एक्टिव सर्वर पेज वास्तव में कैसे काम करता है। एक्टिव सर्वर पेज एक आम एचटीएमएल पेज ही होता है लेकिन इसमें कुछ अतिरिक्त विशेषताएं होती है जिन विशेषताओं के कारण यह आम एचटीएमएल से कुछ ज्यादा है और इसका फ़ाइल एक्सटेंशन .asp होता है न कि .Html अथवा .htm
ASP के अंतर्गत तीन मुख्य विशेषताएं हैं, जो इस प्रकार है:
१) Server side scripts: ASP के भीतर सर्वर साइड स्क्रिप्ट होता है जो वेब सर्वर के भीतर रन होता है। इस कारण गत्यात्मक वेबपेज dynamic webpage बनाना सम्भव हो पाता है
२) Built-in Objects: ASP के भीतर कुछ बने बनाए ऑब्जेक्ट्स होते हैं जिन ऑब्जेक्ट्स का उपयोग कर हम विभिन्न प्रकार के इंफॉर्मेशन को एकत्र कर सकते हैं। उदाहरण के लिए, Request रिक्वेस्ट ऑब्जेक्ट का उपयोग कर हम यह जानकारी प्राप्त कर सकते हैं कि यूजर ने जब एचटीएमएल फॉर्म को पोस्ट किया तो उसमें क्या-क्या इंफॉर्मेशन भेजा है।
३) Components: ASP के अंतर्गत कुछ अतिरिक्त कॉम्पोनेंट्स होते हैं जिन कॉम्पोनेंट्स की वजह से ASP की उपयोगिता बढ़ जाती है। हम थर्ड पार्टी कंपोनेंट्स भी उपयोग कर सकते हैं अथवा हम अपना खुद भी कंपोनेंट्स बना सकते हैं। इस तरीके से ASP की क्षमता को बढ़ाया जा सकता है। कम्पोनेंट क्या होता है इसके बारे में हम आगे देखेंगे।
ASP शब्द के निहितार्थ
अब हम समझेंगे कि ASP शब्द का क्या निहित अर्थ है। देखिए, एक्टिव सर्वर का मतलब निकलता है कि सर्वर एक्टिव है। एक्टिव से तात्पर्य यह है कि सर्वर डायनेमिक कंटेंट बना सकता है। इसका अर्थ यह हुआ कि एचटीएमएल फाइल का कंटेंट/सामग्री प्रोग्रामेटिकली तैयार होगा ना कि वह स्टैटिक एचटीएमएल पेज होगा। स्थैतिक और गत्यात्मक html पेज के बारे में यह बात आगे स्पष्ट हो जाएगी। पढ़ना जारी रखें।
एक्टिव सर्वर पेज का मतलब है कि सर्वर के एक्टिव होने के कारण asp पेज एचटीएमएल पेज में डायनेमिक रूप से रूपांतरित हो जाए। अगर स्टैटिक एचटीएमएल पेज भेजना हो तो उसके लिए एक सर्वर को एक्टिव होने की जरूरत नहीं है, उसे कुछ ज्यादा नहीं करना है बस उसे अपने ड्राइव से वांछित स्टैटिक फाइल को सर्च कर निकालना है और ब्राउज़र को भेज देना जबकि डायनेमिक एचटीएमएल पेज के केस में वेब सर्वर को कुछ अतिरिक्त काम करना पड़ता है जिसकी वजह से उसकी एक्टिविटी बढ़ जाती है।( यह बात हम आगे समझेंगे। इसकी व्याख्या मैंने आगे की है। ) यही कारण है कि हम ASP सम्बंधित सर्वर को एक्टिव सर्वर कहते हैं। जब इस तरह के गत्यात्मक पेज को वेब सर्वर क्लाइंट को भेजता है तो ऐसे पेज को एक्टिव सर्वर पेज कहते हैं।
ASP का वेबसर्वर
आमतौर ASP के अंतर्गत IIS आईआईएस वेबसर्वर का उपयोग किया जाता है परंतु यह कोई जरूरत नहीं है कि हम आईआईएस वेब सर्वर का ही उपयोग करें, हम किसी अन्य वेब सर्वर का भी उपयोग करके ASP वेब एप्लीकेशन को बना सकते हैं।
HTML पेज की प्रक्रिया
अब हम यह देखेंगे किसी HTML पेज को जब सर्वर द्वारा प्रस्तुत किया जाता है तो उसके कितने चरण है। आमतौर पर यह पांच चरणों में विभाजित किया जाता है जो निम्न प्रकार है।
१) प्रथम चरण: जब यूजर वेब ब्राउज़र के भीतर एड्रेस बार में किसी वेब पेज के लिए रिक्वेस्ट करता है तो वह एड्रेस बार में पूरा यूआरएल लिखता है। यूआरएल के बारे में हम आगे विस्तार से पढेंगे।
२) दूसरा चरण: जब ब्राउज़र उस रिक्वेस्ट को वेब पेज के लिए वेब सर्वर को भेजता है
३) तीसरा चरण: वेब सर्वर उस रिक्वेस्ट को प्राप्त करता है और यह पहचान करता है कि यह रिक्वेस्ट किस तरह के एचटीएमएल फाइल के लिए आया है क्योंकि जब फाइल की रिक्वेस्ट की जाती है तो उसका एक्सटेंशन एचटीएम या एचटीएमएल होता है।
४) चौथा चरण: वेब सर्वर उचित प्रॉपर एचटीएमएल फाइल को सर्च कर प्राप्त कर अपने सर्वर के डिस्क या मेमोरी से निकालकर वापस ब्राउज़र को भेज देता है।
५) पांचवा चरण: वेब ब्राउज़र उस एचटीएमएल फाइल को इंटरप्रेट करता है और अंतिम रिजल्ट ब्राउज़र के विंडो में प्रदर्शित कर देता है।
ASP पेज की प्रक्रिया
अब हम यह देखेंगे किसी ASP पेज को जब सर्वर द्वारा प्रस्तुत किया जाता है तो उसके कितने चरण है। आमतौर पर यह आठ चरणों में विभाजित किया जाता है जो निम्न प्रकार है।
१) प्रथम चरण: जब यूजर वेब ब्राउज़र के भीतर एड्रेस बार में किसी वेब पेज के लिए रिक्वेस्ट करता है तो वह एड्रेस बार में पूरा यूआरएल लिखता है। यूआरएल के बारे में हम आगे विस्तार से पढेंगे।
२) दूसरा चरण: जब ब्राउज़र उस रिक्वेस्ट को वेब पेज के लिए वेब सर्वर IIS को भेजता है।
३) तीसरा चरण: वेब सर्वर उस रिक्वेस्ट को प्राप्त करता है और यह पहचान करता है कि यह रिक्वेस्ट किस तरह के ASP फाइल के लिए आया है क्योंकि जब फाइल की रिक्वेस्ट की जाती है तो उसका एक्सटेंशन .asp होता है।
४) चौथा चरण: वेब सर्वर प्रॉपर ASP फाइल को सर्च कर अपने सर्वर के डिस्क या मेमोरी से निकालता है।
५) पांचवा चरण: वेबसर्वर उस फ़ाइल को प्रोसेस करने के लिए एक खास प्रोग्राम ASP.dll को भेज देता है।
६) छठा चरण: वह प्रोग्राम उस फ़ाइल को इंटरप्रेट line by line करता है। और उसको एचटीएमएल में बदल देता है।
७) सातवें चरण: सर्वर उस एचटीएमएल फ़ाइल को वापस ब्राउज़र को भेज देता है।
५) आठवा चरण: वेब ब्राउज़र उस एचटीएमएल फाइल को इंटरप्रेट करता है और अंतिम रिजल्ट ब्राउज़र के विंडो में प्रदर्शित कर देता है।
नोट: जब भी ASP पेज में किसी प्रकार का परिवर्तन किया जाता है तो उसे दोबारा इंटरप्रेट करने के लिए सर्वर पर भेजा जाता है और सर्वर पर स्थित ASP.dll प्रोग्राम उसको दोबारा इंटरप्रेट करता है। जब भी पेज में परिवर्तन होता है तो यह प्रक्रिया आमतौर पर होती है।
वेब सर्वर के लिए एचटीएमएल पेज और ASP पेज में बहुत बड़ा अंतर होता है। जब सर्वर से किसी एचटीएमएल पेज के लिए रिक्वेस्ट किया जाता है तो वह उस एचटीएमएल पेज को बिना प्रोसेस किए ब्राउज़र को भेज देता है जबकि इसके विपरीत किसी ASP पेज की रिक्वेस्ट सर्वर से की जाती है तो सर्वर उस ASP पेज को पूरा प्रोसेस कराता है और प्रोसेस करने के बाद उसे एचटीएमएल पेज में कन्वर्ट करके ब्राउज़र को भेज देता है। याद रखें कि ब्राउज़र HTML को ही समझता है। पेज में किसी भी प्रकार का स्क्रिप्ट हो उसको HTML में परिवर्तित करने के बाद ही ब्राउज़र को उपलब्ध कराया जाता है क्योंकि ब्राउज़र केवल HTML भाषा को ही समझता है।
ASP के भीतर आमतौर पर VBScript का उपयोग किया जाता है। हम किसी अन्य स्क्रिप्टिंग लैंग्वेज का प्रयोग भी ASP के अंतर्गत कर सकते हैं, जैसे JScript और PerlScript लेकिन आमतौर पर VBScript का उपयोग ASP के भीतर किया जाता है।
ASP में स्क्रिप्टिंग
ASP का एक्सटेंशन .asp होता है जैसा कि हमने पीछे देखा है। अब सवाल है कि इसमें कोडिंग कैसे की जाती है? आमतौर पर जो एचटीएमएल फाइल होता है उसमें केवल एचटीएमएल की कोडिंग होती है जबकि ASP फाइल के भीतर एचटीएमएल के साथ-साथ ASP के स्क्रिप्ट की कोडिंग होती है। जहां जहां ASP का स्क्रिप्ट यूज करना होता है उसके लिए हम स्क्रिप्ट डेलीमीटर का उपयोग करते हैं जो <% से शुरू होता है और %> से समाप्त होता है। स्क्रिप्टिंग डेलीमीटर के भीतर अगर हम किसी खास स्क्रिप्टिंग लैंग्वेज का उपयोग करना चाहते हैं तो हम लैंग्वेज डायरेक्टिव का उपयोग करते हैं।
<%@ Language=JScript %>
ASP के बिल्कुल टॉप में पहली लाइन में हम इस डायरेक्टिव का उपयोग करते हैं। ध्यान दीजिए कि हम डायरेक्टिव का उपयोग करने के लिए ऐड द रेट @ सिंबल का प्रयोग परसेंटेज % संकेत के बिल्कुल सटे हुए करते हैं।
जैसा कि हम जानते हैं कि किसी एचटीएमएल पेज के भीतर क्लाइंट साइड स्क्रिप्टिंग भी हो सकती है और सर्वर साइड भी। जब ASP के अंतर्गत सर्वर साइड स्क्रिप्टिंग करनी होती है तो इस <script> टैग के भीतर runat ="server" आट्रिब्यूट का प्रयोग करते हैं। इससे यह स्पष्ट होता है कि यह स्क्रिप्ट सर्वर पर रन होगा।
Output directive
ASP के अंतर्गत किसी एक्सप्रेशन के मान को आउटपुट करने के लिए हम आउटपुट डायरेक्टिव का उपयोग करते हैं इस डायरेक्टर का उपयोग करने के लिए हमें script delimiter के starting delimiter के बाद बराबर का निशान देना होता है। <%=expression%>
ASP की क्षमता को बढ़ाने के लिए कई सारे बने बनाए ऑब्जेक्ट्स और कॉम्पोनेंट्स उपलब्ध है। हम जैसा कि जानते हैं कि ऑब्जेक्ट के मेथडस और प्रॉपर्टीज होते हैं जिनका उपयोग कर हम वांछित कार्य करते हैं।
Some in-built objects
नीचे हम ASP के ऑब्जेक्टस के बारे में बात करेंगे।
१) Application object एप्लीकेशन ऑब्जेक्ट
२) Request रिक्वेस्ट ऑब्जेक्ट
३) Response रिस्पांस ऑब्जेक्ट
४) Server सर्वर ऑब्जेक्ट
५) Session सेसन ऑब्जेक्ट
६) Object Context ऑब्जेक्ट कॉन्टेक्स्ट ऑब्जेक्ट
जैसा कि हम जानते हैं कि किसी ऑब्जेक्ट के भीतर डाटा या इंफॉर्मेशन store होता है। अतः ऊपर दिए गए विभिन्न प्रकार के ऑब्जेक्ट्स के द्वारा हम किसी डाटा को या तो संचित store कर सकते हैं अथवा प्राप्त retrieve कर सकते हैं।
हम देखेंगे कि कि इन अलग-अलग ऑब्जेक्ट्स में किस तरह के डाटा को स्टोर किया जाता है।
Application object
एप्लीकेशन ऑब्जेक्ट का उपयोग इस तरह के इंफॉर्मेशन को स्टोर करने के लिए किया जाता है जिसको एप्लीकेशन के सभी प्रकार के यूजर के बीच साझा करना होता है। Application ऑब्जेक्ट एक बना बनाया ऑब्जेक्ट होता है, अतः इसको डेवलपर को क्रिएट नहीं करना पड़ता है।
Request object
जब ब्राउज़र के द्वारा इंफॉर्मेशन को सर्वर पर भेजा जाता है तो उस इंफॉर्मेशन या डाटा के बारे में जानकारी प्राप्त करने के लिए हम रिक्वेस्ट ऑब्जेक्ट का उपयोग करते हैं। Request Object ब्राउज़र के नाम, वर्शन इत्यादि की जानकारी को भी सर्वर पर भेजता है। Request ऑब्जेक्ट एक बना बनाया ऑब्जेक्ट होता है, अतः इसको डेवलपर को क्रिएट नहीं करना पड़ता है।
Response object
जब सर्वर के द्वारा इंफॉर्मेशन को ब्राउज़र के पास भेजा जाता है तो उस इंफॉर्मेशन के बारे में जानकारी प्राप्त करने के लिए हम रिस्पांस ऑब्जेक्ट का उपयोग करते हैं। उदाहरण के लिए जब सर्वर ब्राउज़र के पास कोई डेटा भेजता है और ब्राउज़र उस डाटा को डिस्प्ले करना चाहता है तो उसके लिए हम रिस्पांस ऑब्जेक्ट के Write मेंथड यूज करते हैं। Response ऑब्जेक्ट एक बना बनाया ऑब्जेक्ट होता है, अतः इसको डेवलपर को क्रिएट नहीं करना पड़ता है।
Server object
सर्वर ऑब्जेक्ट का उपयोग करके हम सर्वर के बारे में कई प्रकार की जानकारी प्राप्त कर सकते हैं उदाहरण के लिए सर्वर ऑब्जेक्ट का उपयोग करके हम किसी स्क्रिप्ट के रन होने के टाइम लेंथ को कंट्रोल कर सकते हैं। Server ऑब्जेक्ट एक बना बनाया ऑब्जेक्ट होता है, अतः इसको डेवलपर को क्रिएट नहीं करना पड़ता है।
Session object
सेशन ऑब्जेक्ट का उपयोग करके किसी भी यूजर के सेशन को कंट्रोल किया जा सकता है। इसका अभिप्राय यह है कि जब कोई यूज़र किसी बेव एप्लिकेशन को यूज करता है तो उसकी एक सेशन क्रिएट की जाती है और उस सेशन की एक्सपायरी भी तय की जाती है। इसके लिए सेसन ऑब्जेक्ट का उपयोग किया जाता है। इस तरीके से किसी भी यूजर के क्रियाकलापों और डाटा के परसिस्टेंस अर्थात स्थायित्व/स्थिरता को कंट्रोल किया जाता है। जैसा कि हम जानते हैं कि एचटीटीपी प्रोटोकोल एक क्षणभंगुर प्रोटोकॉल है अर्थात यह किसी भी इंफॉर्मेशन या स्टेट को स्टोर करके सर्वर पर नहीं रखता है परंतु अगर इंफॉर्मेशन को परसिस्ट करना हो अर्थात किसी सेशन विशेष के लिए उसे स्टोर करना हो तो ऐसी हालत में सेशन ऑब्जेक्ट का उपयोग कर इंफॉर्मेशन को स्टोर कर लेते हैं। Session ऑब्जेक्ट एक बना बनाया ऑब्जेक्ट होता है, अतः इसको डेवलपर को क्रिएट नहीं करना पड़ता है।
ऑब्जेक्टकॉन्टेक्स्ट का उपयोग किसी ट्रांजैक्शन के दौरान होने वाले क्रियाकलापों को कंट्रोल करने के लिए किया जाता है।
ऊपर बताए गए ASP के ऑब्जेक्टस के बारे में एक बहुत महत्त्वपूर्ण बात यह है कि डेवलपर को इन ऑब्जेक्ट्स को क्रिएट नहीं करना पड़ता है, यह बने बनाए ऑब्जेक्ट्स हैं और डेवलपर अपने code में इनको सीधे डायरेक्टली यूज कर सकता है।
ASP Components
अभी हमने ASP के अंतर्गत उपयोग होने वाले कुछ महत्वपूर्ण बने बनाए ऑब्जेक्टस की चर्चा की। अब हम ASP के अंतर्गत उपयोग किए जाने वाले कॉम्पोनेंट्स की चर्चा करेंगे। ऑब्जेक्ट की तुलना में कॉम्पोनेंट्स खास होते हैं क्योंकि इनका उपयोग किसी खास काम के लिए किया जाता है, उदाहरण के लिए AdRotator एडरोटेटर कंपोनेंट, इसका उपयोग किसी बैनर एडवर्टाइजमेंट को वेब पेज पर दिखाने के लिए किया जाता है। इसी तरह काउंटर कंपोनेंट का उपयोग वेबसाइट पर विजिट करने वाले विजिटर की संख्या की गिनती करने के लिए किया जाता है जबकि पेज काउंटर कंपोनेंट का उपयोग ना केवल विजिटर के विजिट की संख्या को ट्रैक करने के लिए आता है बल्कि किसी खास पेज पर कितना हिट हुआ उसकी भी काउंटिंग की जाती है। इसके अलावा और भी कई तरह के कंपोनेंट है जैसे एक्टिवेक्स डाटा ऑब्जेक्ट एडीओ ADO कंपोनेंट्स जिसका उपयोग कर किसी डेटाबेस जैसे माइक्रोसॉफ्ट एसक्यूएल सर्वर में डाटा को स्टोर किया जा सकता है और उस सर्वर से फिर डाटा को प्राप्त किया जा सकता है।
जैसा कि हमने देखा कि ASP के कुछ ऊपरलिखित ऑब्जेक्ट्स को क्रिएट करने की डेवलपर को जरूरत नहीं होती है क्योंकि ये ऑब्जेक्ट्स बने बनाए होते हैं जबकि इसके विपरीत कंपोनेंट्स को क्रिएट करने के लिए यूजर को खुद प्रयास करना होता है। यूजर को कंपोनेंट्स खुद क्रिएट करना होता है। जब किसी कंपोनेंट को क्रिएट किया जाता है तो उसका लाइफ और स्कोप तय किया जाता है। जिस प्रकार किसी वेरिएबल का स्कोप होता है, लाइफ होता है, ठीक उसी प्रकार कंपोनेंट्स का भी लाइफ और स्कोप होता है।
Page Scope
सर्वर पर किसी कंपोनेंट को क्रिएट करने के लिए Server ऑब्जेक्ट का उपयोग किया जाता है। उसके CreateObject मेथड का उपयोग कर कंपोनेंट को क्रिएट किया जाता है जैसा कि नीचे के उदाहरण में दिखाया गया है।
Set myDix = Server.CreateObject("Scripting.Dictionary")
Vbscript की ऊपर कॉडिंग है।
ऊपर के उदाहरण में myDix वेरिएबल का स्कोप वहीं पेज है जिस पेज में इस कोड को लिखा गया है। जैसे ही उस पेज को छोड़कर यूज़र दूसरे पेज पर जाता है तब यह वेरिएबल अपने आप नष्ट/डिस्ट्रॉय हो जाता है।
Session Scope
अगर हम चाहते हैं कि ऊपर क्रिएट किए गए कंपोनेंट का लाइफ़ या स्कोप दूसरे पेज पर भी हो अर्थात जब यूजर एक पेज से दूसरे पेज पर जाए तब भी कंपोनेंट एक्जिस्ट करें, उपस्थित हो, नष्ट न हो तो इसके लिए हम सेशन ऑब्जेक्ट का उपयोग करते हैं। सेशन ऑब्जेक्ट की मदद से हम किसी कंपोनेंट के स्कोप को सेशन लेवल का कर देते हैं।
<%
Set Session("myDix" ) = Server.CreateObject("Scripting.Dictionary")
%>
दूसरा तरीका
किसी कंपोनेंट के स्कोप को सेसन स्तर का बनाने के लिए एक दूसरा तरीका भी है। इसके अंतर्गत एचटीएमएल के भीतर <OBJECT> Tag का उपयोग करते हैं। इस टैग के attributes द्वारा सेसन स्तर निश्चित किया जाता है।
<OBJECT RUNAT="SERVER" SCOPE="SESSION" ID="myDix" PROGID="MSWC.BrowserType">
ध्यान दीजिए कि सर्वर लेवल के कंपोनेंट को बनाने के लिए 4 प्रॉपर्टीज का उपयोग किया गया है। RUNAT="SERVER" बताता है कि यह कंपोनेंट सर्वर पर रन होगा जबकि इस कंपोनेंट के स्कोप को बताने के लिए स्कोप प्रॉपर्टी का उपयोग किया गया है और उसकी वैल्यू सेशन दी गई है जो यह बता रहा है कि पूरे सेशन के दौरान यह कंपोनेंट उपस्थित होगा। तीसरा प्रोपर्टी आईडी है, आईडी का उपयोग कोड के भीतर इस कंपोनेंट की पहचान के लिए है जबकि PROGID="MSWC.BrowserType" का उपयोग सर्वर के द्वारा इस कंपोनेंट की पहचान के लिए है। इस नाम के द्वारा कंपोनेंट का रजिस्ट्रेशन सर्वर करता है।
Application level Scope
जब किसी कंपोनेंट को एप्लीकेशन लेवल का बनाया जाता है तो यह कंपोनेंट तब तक उपलब्ध होता है जब तक इस सर्वर डाउन ना हो जाए अथवा एप्लीकेशन को शटडाउन न कर दिया जाए।
एप्लीकेशन स्कोप को तय करने के लिए भी दो तरीके हैं जैसा कि सेशन स्कोप के लिए है।
पहला तरीका
अगर हम चाहते हैं कि ऊपर क्रिएट किए गए कंपोनेंट का लाइफ़ या स्कोप पूरे एप्लिकेशन की लाइफ के दौरान हो, कंपोनेंट एक्जिस्ट करें, उपस्थित हो, नष्ट न हो तो इसके लिए हम एप्लिकेशन ऑब्जेक्ट का उपयोग करते हैं। एप्लिकेशन ऑब्जेक्ट की मदद से हम किसी कंपोनेंट के स्कोप को एप्लिकेशन लेवल का कर देते हैं।
<%
Set Application("myDix" ) = Server.CreateObject("Scripting.Dictionary")
%>
दूसरा तरीका
किसी कंपोनेंट के स्कोप को एप्लिकेशन स्तर का बनाने के लिए एक दूसरा तरीका भी है। इसके अंतर्गत एचटीएमएल के भीतर <OBJECT> Tag का उपयोग करते हैं। इस टैग के attributes द्वारा एप्लिकेशन स्तर निश्चित किया जाता है।
<OBJECT RUNAT="SERVER" SCOPE="Application" ID="myDix" PROGID="MSWC.BrowserType">
जैसा कि हमने देखा कि ASP के अंतर्गत कुछ बने बनाए ऑब्जेक्ट्स होते हैं जिनका डेवलपर अपने कोड में उपयोग कर वांछित इंफॉर्मेशन को प्राप्त कर सकता है। खास करके रिक्वेस्ट Request ऑब्जेक्ट और Response रिस्पांस ऑब्जेक्ट का उपयोग वेब डेवलपमेंट के दौरान बहुत ज्यादा करते हैं। Request ऑब्जेक्ट की सहायता से रिक्वेस्ट इनफार्मेशन मैसेज के बारे में जानकारी प्राप्त की जाती है जबकि Response ऑब्जेक्ट की सहायता से response इनफार्मेशन मैसेज के बारे में जानकारी प्राप्त की जाती है। हम इन सब चीजों के बारे में आगे पढ़ेंगे परंतु इसके पहले वेब से जुड़े कुछ बेसिक बातों के बारे में जानकारी होना जरूरी है। इनके अभाव में किसी नए डेवलपर के लिए आगे मुश्किल हो सकती है अतः बिल्कुल बेसिक स्तर से इस लेख में रिक्वेस्ट और रिस्पांस ऑब्जेक्ट से जुड़ी बातों को बताया गया है।
यह बात याद रखें की वेब टेक्नोलॉजी के अंतर्गत वेब कम्युनिकेशन हमेशा दो मशीनों के बीच में होता है। जो मशीन रिक्वेस्ट को भेजता है उसे क्लाइंट मशीन कहते हैं और जो मशीन उस रिक्वेस्ट को प्रोसेस करके रिस्पांस देता है उसे सर्वर मशीन कहते हैं। सर्वर मशीन को वेबसर्वर/फ़ाइल सर्वर/मेल सर्वर भी कहते हैं, यह नाम उनके सर्विसेज के आधार पर निर्धारित किया जाता है। वेबसर्वर सॉफ्टवेयर है जिसका उपयोग रिक्वेस्ट को प्रोसेस करने के लिए किया जाता है।
एक डेवलपर के रूप में जब हम वेब ऐप्लिकेशन डिवेलप करते हैं तब जिस मशीन पर हम कोडिंग करते हैं वह मशीन क्लाइंट मशीन का भी काम करता है और सर्वर मशीन का भी काम करता है। जो भी सर्वर से जुड़े सॉफ्टवेयर होते हैं वह क्लाइंट मशीन पर इंस्टॉल होता है।
वास्तविक जगत में जो वेबसाइट होते हैं वह किसी वेब सर्वर पर होस्ट होते हैं। होस्ट होने का अर्थ यह है कि वेबसाइट जो कि कई सारे वेबपेज से मिलकर बना होता है, सर्वर के किसी drive के फोल्डर में इंस्टॉल होता है। वस्तुतः वेबपेज और अन्य संसाधनों का संग्रह वेबसाइट कहलाता है।
यूआरएल की संरचना और पोर्ट संख्या
निम्नलिखित यूआरएल के उदाहरण पर विचार करें।
http://www.example.com:80/resourcepath
किसी भी यूआरएल के अलग-अलग हिस्से होते हैं जिनको समझना जरूरी है।
scheme://prefix.host:port/path/filename?queryString
यूआरएल हमेशा कुछ शर्तों के अधीन लिखा जाता है। यूआरएल के कई हिस्से होते हैं। यूआरएल के अंगों को एक निश्चित क्रम में लिखा जाता है। सबसे पहले यूआरएल scheme लिखा जाता है जो नेटवर्क के प्रोटोकॉल स्कीम को बताता है जैसे http, https, ftp, file इत्यादि। इसके बाद नेटवर्क के prefix को लिखा जाता है जो आमतौर पर www होता है। इसके बाद होस्ट आईपी एड्रेस या डोमेन नेम लिखा जाता है और colon के बाद port नम्बर लिखा जाता है। उसके बाद resource का path लिखा जाता है जो फोल्डर और उस फोल्डर के अधीन के फ़ोल्डर्स को बताता हैं। तत्पश्चात उस फ़ाइल का नाम लिखा जाता है जिसको यूजर प्राप्त करना चाहता है। कभी कभी यूजर डाटा को सर्वर पर भेजना चाहता है जिसके लिए क्वेरी स्ट्रींग का उपयोग ? चिह्न के बाद किया जाता है। क्वेरी स्ट्रिंग और पोर्ट नम्बर वैकल्पिक हैं। सभी यूआरएल में यह होना अनिवार्य नहीं है।
यूआरएल एनकोडिंग
यूआरएल के कैरेक्टर्स के बीच में किसी प्रकार का गैप नहीं होना चाहिए और यूआरएल में यह आशा की जाती है कि यूआरएल में केवल ASCII कैरेक्टर्स यूज किया गया है। अब अगर इस शर्त का पालन नहीं हो तो यूआरएल के कैरेक्टर्स की इनकोडिंग की जाती है जिसे यूआरएल इनकोडिंग कहते हैं।
यूआरएल इनकोडिंग के अंतर्गत जितने भी non-ASCII कैरेक्टर्स होते हैं, उनको ASCII कैरक्टर्स में कन्वर्ट कर दिया जाता है और इसी प्रकार अगर कैरेक्टर्स के बीच में व्हाईटस्पेस है तो उसे भी ASCII कैरेक्टर्स में कन्वर्ट कर दिया जाता है।
यूआरएल का उद्देश्य
जब भी क्लाइंट मशीन सर्वर मशीन से किसी डाटा की रिक्वेस्ट करता है तो इसके लिए ब्राउज़र के एड्रेसबार में यूआरएल को लिखा जाता है। यूआरएल का पूरा अर्थ है यूनिफॉर्म रिसोर्स लोकेटर। हिंदी में इसका अर्थ हुआ सामान्य संसाधन resource की स्थिति को बताने वाला। अब इसका अर्थ यह हुआ कि किसी संसाधन जैसे html या asp या पीडीएफ फ़ाइल की प्राप्ति के लिए उसका एड्रेस लिखना। जब एड्रेस बार में सर्वर मशीन के डोमेन नेम को लिखा जाता है तो वह वस्तुतः आईपी एड्रेस में बदल जाता है। साथ ही प्रोटोकॉल को ध्यान में रखते हुए डोमेन नेम के बाद पोर्ट की संख्या कॉलन के बाद लिखी जाती है।
पोर्ट संख्या किसी सॉफ्टवेयर सर्विस के बारे में बताता है। HTTP के लिए पोर्ट संख्या 80 है जबकि DNS के लिए यह 53 है जबकि SMTP के लिए यह 25 है।
आमतौर पर HTTP प्रोटोकॉल के अंतर्गत पोर्ट संख्या निश्चित होती है और उसका मान 80 होता है। कहने का अर्थ यह है कि HTTP प्रोटोकोल के लिए पोर्ट की संख्या सामान्यतः 80 होता है अतः उसे यूआरएल में लिखा भी नहीं जाता है। ऐसी स्थिति में यह 80 मान लिया जाता है। निम्नलिखित उदाहरण को देखे इसमें पोर्ट संख्या का उल्लेख नहीं किया गया है और प्रोटोकॉल HTTP है अतः पोर्ट संख्या 80 होगी।
http://www.example.com/resourcepath
लेकिन अगर आप चाहते हैं कि किसी अन्य पोर्ट से एचटीटीपी प्रोटोकोल का पालन किया जाए तो उस संख्या को हम लिख सकते हैं। http://www.example.com:8080/resourcepath
उपर्युक्त उदाहरण में पोर्ट की संख्या स्पष्ट रूप से 8080 दी गई है यद्यपि HTTP प्रोटोकॉल का उपयोग यूआरएल में किया गया है।
पोर्ट का महत्व क्या है?
पोर्ट का अर्थ होता है किसी चीज को एक जगह से दूसरी जगह पहुंचाने का स्थल जैसे बंदरगाह, एयरपोर्ट इत्यादि। जब माल एक जगह से दूसरी जगह भेजा जाता है तो उसे एक्सपोर्ट export कहते हैं और जब माल दूसरी जगह से उस स्थान पर आता है तो उसे इंपोर्ट import कहते हैं।
कम्युनिकेशन के अंतर्गत भी बिल्कुल इसी तरह की बात है। इंफॉर्मेशन को हम माल मान सकते हैं जिसका वहन एक जगह से दूसरी जगह अर्थात क्लाइंट मशीन से सर्वर मशीन और सर्वर मशीन से क्लाइंट मशीन पर होता है।
जिस तरह अलग-अलग तरह के माल होते हैं और उनकी ढुलाई के लिए अलग-अलग तरह के उपाय हैं जैसे कुछ माल हवाई जहाज से एयरपोर्ट से जाता है जबकि कुछ माल जलमार्ग से। कुछ माल ज्यादा सुरक्षित तरीके से पहुंचाया जाता है जबकि कुछ बिना किसी सुरक्षा उपाय के। ठीक इसी तरह, इंटरनेट कम्युनिकेशन के अंतर्गत कुछ सूचनाएं अत्यंत ही सुरक्षित तरीके से पहुंचाई जाती है तो कुछ सामान्य तरीके से। अलग अलग तरह की सूचनाओं के लिए अलग अलग पोर्ट संख्या का उपयोग होता है।
पोर्ट संख्या अर्थात निश्चित सॉफ्टवेयर सेवा
पोर्ट संख्या वस्तुतः उस सॉफ्टवेयर सर्विस को इंगित करता है जिसका उपयोग उस इंफॉर्मेशन को प्रोसेस करने के लिए किया जाता है जैसे कि कोई मेल सर्विस है तो उस मेल सर्विस के लिए एक खास तरह का पोर्ट बनाया गया है। जब भी किसी कंप्यूटर से कोई ईमेल दूसरे कंप्यूटर पर जाता है तो उसके लिए एक निश्चित पोर्ट संख्या है जिस संख्या पर मेल जाता है और ईमेल सॉफ्टवेयर की सहायता से उस ईमेल की प्रोसेसिंग की जाती है।
जैसा की मैंने पहले ही बताया है कि पोर्ट संख्या किसी सॉफ्टवेयर सर्विस के बारे में बताता है। HTTP के लिए पोर्ट संख्या 80 है जबकि DNS के लिए यह 53 है जबकि SMTP के लिए यह 25 है। ये सभी अलग अलग पोर्ट अलग अलग सॉफ्टवेयर सर्विसेज के लिए आरक्षित हैं।
विकिपीडिया के पेज से निम्नलिखित वाक्यांश लिए गए हैं यह इसी बात को बताता है कि port नम्बर सॉफ्टवेयर सर्विस से सम्बंधित है।
पोर्ट नंबर हमेशा होस्ट के आईपी एड्रेस और संचार के लिए उपयोग किए जाने वाले transport प्रोटोकॉल के प्रकार से जुड़ा होता है। यह किसी संदेश के गंतव्य या उत्पत्ति नेटवर्क एड्रेस को पूरा करता है। जब request मेसेज सर्वर मशीन पर पहुंचता है तो यह नहीं मानना चाहिए कि सन्देश गन्तव्य तक पहुंच गया। वस्तुतः उस सन्देश को उस मशीन के उस सॉफ्टवेयर एप्लिकेशन तक पहुंचाना होता है जहां उस सन्देश की प्रोसेसिंग हो सके। अतः पोर्ट नम्बर गन्तव्य एड्रेस को पूरा करता है।
विशिष्ट पोर्ट नंबर विशिष्ट सेवाओं की पहचान करने के लिए आरक्षित हैं ताकि एक आने वाले पैकेट को आसानी से उस सेवा से सम्बंधित एप्लिकेशन को अग्रेषित/forwarded किया जा सके। यह सुरक्षा उपाय भी प्रदान करता है क्योंकि केवल आरक्षित सेवा के लिए वह पोर्ट उपलब्ध होता है।
विकिपीडिया के अनुसार,
A port number is always associated with an IP address of a host and the type of transport protocol used for communication. It completes the destination or origination network address of a message. Specific port numbers are reserved to identify specific services so that an arriving packet can be easily forwarded to a running application. For this purpose, port numbers lower than 1024 identify the historically most commonly used services and are called the well-known port numbers.
Applications implementing common services often use specifically reserved well-known port numbers for receiving service requests from clients. This process is known as listening, and involves the receipt of a request on the well-known port potentially establishing a one-to-one server-client dialog, using this listening port.
The port numbers are divided into three ranges: the well-known ports, the registered ports, and the dynamic or private ports.
यूआरएल और पोर्ट संख्या के बारे में जानने के बाद हम वापस अपने मूल विषय पर आते हैं।
वेबसाइट को एक वर्चुअल डायरेक्टरी से इंगित किया जाता है। जब भी किसी वेबसाइट को एक्सेस करना होता है तो यूजर उस वेबसाइट के डोमेन नेम को यूआरएल में लिखता है। जैसे http://www google.com यूआरएल में डोमेन नेम लिखने से यूजर को उस वेबसाइट या डोमेन के आईपी एड्रेस को याद नहीं रखना होता है। हकीकत तो यह है यह किसी भी वेबसाइट का एक अद्वितीय यूनिक आईपी एड्रेस होता है और उस यूनिक आईपी ऐड्रेस से उस वेबसाइट को एक्सेस किया जाता है। इस बात को हम अब समझेंगे।
जब हम यूआरएल में http://www लिखते हैं तो यह बताता है कि यूआरएल के जिस resource जैसे html या asp पेज को एक्सेस करना है उसे एचटीटीपी प्रोटोकोल के द्वारा www नेटवर्क से प्राप्त करना है। www पूरा अर्थ वर्ल्ड वाइड वेब है जिसका हिंदी हुआ संसार भर में बिछा हुआ जाल। यह जाल वस्तुतः कम्प्यूटर के नेटवर्क का होता है जो इंटरनेट पर उपलब्ध होता है। इंटरनेट एक टेक्नोलॉजी है जिसकी सहायता से किसी भी दो कंप्यूटर को एक दूसरे से कम्युनिकेशन करने के लिए जोड़ा जा सकता है।
इंटरनेट में कम्युनिकेशन के लिए ऐसे तो कई सारे प्रोटोकॉल उपलब्ध है जिनकी सहायता से ही तो कंप्यूटर आपस में कम्युनिकेट करते हैं परंतु इंटरनेट पर सबसे ज्यादा प्रचलित प्रोटोकोल एचटीटीपी प्रोटोकोल है और हम जब यूआरएल में http:// लिखते हैं तो यह स्पष्ट हो जाता है कि जो कम्युनिकेशन सर्वर से या रिक्वेस्ट जो सर्वर से है वह एचटीटीपी प्रोटोकॉल के द्वारा होगी।
एचटीटीपी के अलावा कुछ अन्य कम्युनिकेशन प्रोटोकोल है जैसे ftp, file, gopher, इत्यादि
http://www. के बाद डोमेन नेम को लिखा जाता है जैसे google.com
इस डोमेन नेम को आईपी में कन्वर्ट करने के लिए डोमेन नेम सर्वर डीएनएस का उपयोग किया जाता है। डीएनएस के द्वारा यह डोमेन नेम यूनीक आईपी एड्रेस में बदल जाता है। दूसरे शब्दों में डोमेन नेम की मैपिंग आईपी एड्रेस से की जाती है। प्रत्येक डोमेन नेम का एक यूनीक आईपी होता है।
जब यूजर डोमेन नेम के बाद किसी रिसोर्स का नाम नहीं लिखता है तो उस डोमेन नेम से जुड़े सर्वर द्वारा एक इंडेक्स पेज या डिफॉल्ट पेज रेस्पॉन्स के रूप में ब्राउज़र/यूजर के पास भेज दिया जाता है। उदाहरण के लिए
http://www.google.com इस यूआरएल में किसी फ़ाइल का ज़िक्र नहीं है, अतः सर्वर डिफॉल्ट पेज भेजेगा लेकिन यदि किसी फ़ाइल का ज़िक्र यूआरएल में हो जैसे http://www.google.com/sales.html
तब सर्वर उस रिक्वेस्ट फ़ाइल को भेजेगा। यदि वह फ़ाइल सर्वर पर नहीं है तब सर्वर रेस्पॉन्स इन्फॉर्मेशन में तत्सम्बन्धी सूचना भेज देगा।
इंटरनेट पर क्लाइंट मशीन और सर्वर मशीन के बीच में सूचना के आदान-प्रदान की प्रक्रिया किसी चिट्ठी के भेजने की प्रक्रिया से बहुत मिलता जुलता है। इस बात को हम आगे देखते हैं।
जब हम किसी चिट्ठी को लिखते हैं तो उसमें सूचना होती है लेकिन हम उस सूचना को गुप्त रखने के लिए उस चिट्ठी को किसी लिफाफे में रख देते हैं और उस पर गोंद भी लगा देते हैं ताकि वह सूचना सुरक्षित हो जाए। साथ ही, लिफाफे के बाहर जिस व्यक्ति को सूचना भेजना है उस व्यक्ति का पूरी एड्रेस लिख देते हैं। साथ ही हम अपना पता भी लिख देते हैं ताकि अगर रिसीवर व्यक्ति उस सूचना को प्राप्त नहीं करें तो लिफाफे को वापस भेजने वाले के पास भेजा जा सके।
बिल्कुल यही बात इंटरनेट में दो कंप्यूटर के बीच में कम्युनिकेशन के बीच में होती है। जब भी किसी सूचना को कोई कंप्यूटर नेटवर्क की सहायता से सर्वर पर भेजता है तो उस सूचना को इंक्रिप्ट कर देता है ताकि वह सूचना सुरक्षित हो जाएं। जिस कंप्यूटर को यह सूचना भेजना है उस कंप्यूटर के बारे में पूरी जानकारी रिक्वेस्ट ऑब्जेक्ट के भीतर सारा डिटेल होता है। साथ ही उस रिक्वेस्ट ऑब्जेक्ट के भीतर भेजने वाले कंप्यूटर की भी पूरी डिटेल होती है जैसे किस ब्राउज़र की मदद से, किस मशीन से, उसका आईपी ऐड्रेस इत्यादि से सूचना भेजी गई। इन सभी request तथ्यों या सूचनाओं को दो भागों में बांटते हैं एक को header और दूसरे को body कहते हैं।
गूगल क्रोम या मोज़िला जैसे किसी भी ब्राउज़र में इस जानकारी को देखा जा सकता है।
अतः डेवलपर को यह बात हमेशा याद रखना है कि उसका कोड दो मशीनों के बीच कम्युनिकेशन से जुड़ा हुआ है, यद्यपि नए डेवलपर को यह बात समझने में थोड़ा समय लग सकता है।
सबसे पहले यह बात याद रखें वेब डेवलपमेंट के अंतर्गत Request और Response हमेशा एचटीटीपी प्रोटोकोल के अंतर्गत ही होती है। जैसा कि हम जानते हैं कि HTTP प्रोटोकोल stateless प्रोटोकॉल है, स्टैटलेस प्रोटोकोल होने के कारण रिक्वेस्ट से संबंधित इंफॉर्मेशन को सर्वर स्टोर करके नहीं रखता। जब भी क्लाइंट को किसी इंफॉर्मेशन की जरूरत होती तब वह सर्वर को रिक्वेस्ट भेजता है। जैसा की रिक्वेस्ट भेजना एक क्रिया है इस क्रिया को HTTP प्रोटोकोल के अंतर्गत HTTP VERB के द्वारा निर्धारित किया जाता है। Request क्रिया कई प्रकार का हो सकता है जैसे GET, POST, PUT, DELETE इत्यादि। इसे हम आगे समझेंगे।
HTTP प्रोटोकॉल के क्रिया के अतिरिक्त एक और विषय समझने लायक है। वह है कनेक्शन ओरिएंटेड प्रोटोकाल। HTTP प्रोटोकॉल एक कनेक्शन ओरिएंटेड प्रोटोकॉल है। इसका क्या अर्थ है? यह हम आगे देखेंगे।
लेखक अजीत कुमार १४ अगस्त २०२१
अंतिम बार ९ अक्टूबर को अद्यतन किया।
© अजीत कुमार, सर्वाधिकार सुरक्षित।
इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।
No comments:
Post a Comment