सर्वर-साइड स्क्रिप्टिंग

सर्वर-साइड स्क्रिप्टिंग वेब विकास में उपयोग की जाने वाली प्रौद्योगिकी है जिसमें वेब विकास पर स्क्रिप्टिंग भाषाओं को नियोजित करना सम्मिलित है जो वेबसाइट के लिए प्रत्येक उपयोगकर्ता (क्लाइंट) के अनुरोध के लिए अनुकूलित प्रतिक्रिया उत्पन्न करता है। इसका विकल्प वेब सर्वर के लिए स्थिर वेब पृष्ठ वितरित करना है। लिपियों को किसी भी उपलब्ध सर्वर-साइड स्क्रिप्टिंग भाषा में लिखा जा सकता है। सर्वर-साइड स्क्रिप्टिंग को क्लाइंट-साइड स्क्रिप्टिंग से भिन्न किया जाता है, जहां एम्बेडेड स्क्रिप्ट, जैसे कि जावास्क्रिप्ट, वेब ब्राउज़र में क्लाइंट-साइड चलाए जाते हैं, परन्तु दोनों प्रौद्योगिकों को प्रायः साथ उपयोग किया जाता है।

सर्वर-साइड स्क्रिप्टिंग का उपयोग प्रायः उपयोगकर्ता के लिए अनुकूलित इंटरफ़ेस प्रदान करने के लिए किया जाता है। ये स्क्रिप्ट उन विशेषताओं, उपयोगकर्ता की आवश्यकताओं, पहुंच अधिकारों आदि के आधार पर प्रतिक्रिया को अनुकूलित करने में उपयोग के लिए क्लाइंट विशेषताओं को इकट्ठा कर सकती हैं। सर्वर-साइड स्क्रिप्टिंग वेबसाइट के अधिपति इंटरफ़ेस को स्रोत कोड को छिपाने में भी सक्षम बनाती है, जबकि क्लाइंट के साथ साइड स्क्रिप्टिंग, उपयोगकर्ता के पास क्लाइंट द्वारा प्राप्त सभी कोड तक पहुंच होती है। सर्वर-साइड स्क्रिप्टिंग के उपयोग का नकारात्मक पक्ष यह है कि क्लाइंट को वेब ब्राउज़र के माध्यम से उपयोगकर्ता को नई जानकारी प्रदर्शित करने के लिए नेटवर्क पर सर्वर से अनुरोध करने की आवश्यकता होती है। ये अनुरोध उपयोगकर्ता के अनुभव को कम कर सकते हैं, सर्वर पर अधिक भार डाल सकते हैं, एवं उपयोगकर्ता के सर्वर से पृथक होने पर एप्लिकेशन के उपयोग को रोक सकते हैं।

जब सर्वर सामान्यतः उपयोग किए जाने वाले विधि से डेटा प्रदान करता है, उदाहरण के लिए, हाइपर टेक्स्ट ट्रांसफर प्रोटोकॉल या फाइल ट्रांसफर प्रोटोकॉल (कंप्यूटिंग) के अनुसार, उपयोगकर्ताओं के पास कई क्लाइंट प्रोग्रामों का विकल्प हो सकता है अर्थात अधिकांश आधुनिक वेब ब्राउज़र उन दोनों प्रोटोकॉल का उपयोग करके डेटा का अनुरोध एवं प्राप्त कर सकते हैं। अधिक विशिष्ट अनुप्रयोगों के मामले में, प्रोग्रामर अपना स्वयं का सर्वर, क्लाइंट एवं संचार प्रोटोकॉल लिख सकते हैं, जिसका उपयोग केवल दूसरे के साथ किया जा सकता है।

ऐसे प्रोग्राम जो किसी नेटवर्क पर डेटा भेजने या प्राप्त किए बिना उपयोगकर्ता के स्थानीय कंप्यूटर पर सक्रिय हैं, उन्हें क्लाइंट नहीं माना जाता है, एवं इसलिए ऐसे प्रोग्रामों के संचालन को क्लाइंट-साइड ऑपरेशन नहीं माना जाता है।

इतिहास
नेटस्केप ने नेटस्केप एंटरप्राइज़ सर्वर के साथ सर्वर-साइड स्क्रिप्टिंग के लिए जावास्क्रिप्ट का कार्यान्वयन प्रारम्भ किया, जिसे प्रथम बार (ब्राउज़रों के लिए जावास्क्रिप्ट प्रस्तुत करने के तुरंत पश्चात) दिसंबर, 1994 में प्रस्तुत किया गया। बोस्टन, एमए टेलीविजन स्टेशन डब्ल्यूसीवीबी टीवी के लिए प्रथम वेबसाइट विकसित करते समय सर्वर-साइड स्क्रिप्टिंग का उपयोग 1995 की प्रारम्भ में फ्रेड डुफ्रेसने द्वारा किया गया था। प्रौद्योगिकी का वर्णन यूएस पेटेंट 5835712 में किया गया है। पेटेंट 1998 में प्रस्तुत किया गया था एवं अब इसका स्वामित्व ओपन आविष्कार नेटवर्क (ओआईएन) के पास है। 2010 में ओआईएन ने सर्वर-साइड स्क्रिप्टिंग पर अपने कार्य के लिए फ्रेड डुफ्रेसने को विशिष्ट आविष्कारक नामित किया।

स्पष्टीकरण
वेब के प्रारम्भ के दिनों में, कॉमन गेटवे इंटरफ़ेस (सीजीआई) का उपयोग करके सी (प्रोग्रामिंग लैंग्वेज) प्रोग्राम, पर्ल स्क्रिप्ट एवं शेल स्क्रिप्ट के संयोजन का उपयोग करके सर्वर-साइड स्क्रिप्टिंग विशेष रूप से की जाती थी। उन स्क्रिप्ट्स को ऑपरेटिंग प्राणाली द्वारा निष्पादित किया गया था, एवं परिणाम वेबसर्वर द्वारा वापस दिए गए थे। कई आधुनिक वेब सर्वर सीधे वेब सर्वर द्वारा या वेब सर्वर पर एक्सटेंशन मॉड्यूल (जैसे mod_perl या mod_php) के माध्यम से सक्रिय सर्वर पृष्ठ, जावा सर्वर पृष्ठ, पर्ल, पीएचपी एवं रूबी (प्रोग्रामिंग भाषा) जैसी ऑन-लाइन स्क्रिप्टिंग भाषाओं को निष्पादित कर सकते हैं। उदाहरण के लिए, WebDNA में अपना स्वयं का एम्बेडेड डेटाबेस प्राणाली सम्मिलित है। स्क्रिप्टिंग के किसी भी रूप (अर्थात, सीजीआई या प्रत्यक्ष निष्पादन) का उपयोग जटिल बहु-पृष्ठ साइटों के निर्माण के लिए किया जा सकता है, परन्तु बाहरी दुभाषियों को कॉल की कम संख्या के कारण प्रत्यक्ष निष्पादन के परिणामस्वरूप सामान्यतः कम ओवरहेड होता है।

डायनेमिक वेबसाइटें कभी-कभी कस्टम वेब एप्लिकेशन सर्वर का उपयोग करती हैं, जैसे कि ग्लासफ़िश, प्लैक (सॉफ्टवेयर) एवं पायथन (प्रोग्रामिंग लैंग्वेज) की बेस हाइपर टेक्स्ट ट्रांसफर प्रोटोकॉल सर्वर लाइब्रेरी, चूँकि कुछ इसे सर्वर-साइड स्क्रिप्टिंग नहीं मान सकते हैं। गतिशील वेब-आधारित स्क्रिप्टिंग प्रौद्योगिकों का उपयोग करते समय, डेवलपर्स को क्लाइंट एवं सर्वर के मध्य तार्किक, अस्थायी एवं भौतिक भिन्नता की गहरी समझ होनी चाहिए। उदाहरण के लिए, सर्वर-साइड कोड के निष्पादन को ट्रिगर करने के लिए उपयोगकर्ता की कार्रवाई के लिए, क्लासिक एएसपी के साथ कार्य करने वाले डेवलपर को स्पष्ट रूप से उपयोगकर्ता के ब्राउज़र को वेबसर्वर पर पुनः अनुरोध करने के लिए प्रेरित करना चाहिए।

सर्वर-साइड स्क्रिप्ट को क्लाइंट के अतिरिक्त सर्वर द्वारा पूर्ण रूप से प्रोसेस किया जाता है। जब क्लाइंट सर्वर-साइड स्क्रिप्ट वाले पृष्ठ का अनुरोध करता है, तो एप्लिकेशन सर्वर स्क्रिप्ट को प्रोसेस करता है एवं क्लाइंट को एचटीएमएल पृष्ठ प्रदान करता है।

सर्वर-साइड रेंडरिंग
वेब के प्रारम्भ में, सामग्री विशुद्ध रूप से बैक एंड पर उत्पन्न हुई थी। फ्रंट एंड पृष्ठ का आवेदन को बड़े स्तर पर स्वीकार करने के पश्चात, क्लाइंट एप्लिकेशन का उपयोग करके एचटीएमएल उत्पन्न करने के लिए बैक एंड पर नया दृष्टिकोण प्रस्तुत किया गया था। सर्वर-साइड रेंडरिंग का उपयोग करने वाले फ्रेमवर्क के उदाहरण Next.js, Nuxt.js एवं Nest.js हैं। वे सर्वर की सामग्री उत्पन्न करने के लिए क्रमशः React.js, Vue.js एवं Angular (वेब ​​फ्रेमवर्क) का उपयोग करते हैं।

सर्वर-साइड पीढ़ी
किसी वेबसाइट के लिए सामग्री तैयार करने की एसएसआर प्रौद्योगिकी के समान सर्वर-साइड पीढ़ी का उपयोग है। यह प्रौद्योगिकी ऐसे एप्लिकेशन का उपयोग करती है जो स्थिर एचटीएमएल पृष्ठ बनाती है एवं फिर उन फ़ाइलों को सर्वर पर भेज दिया जाता है। फ़ाइल निर्माण पूर्ण रूप से भिन्न कंप्यूटर पर हो सकता है उदाहरण के लिए निरंतर वितरण का उपयोग करना। जेकिल (सॉफ्टवेयर), गैट्सबी (सॉफ्टवेयर) या एलेवेंटी (सॉफ्टवेयर) एसएसजी टूल्स के उदाहरण हैं। उन साइटों को प्रायः नेटलिफाई या गिटहब पृष्ठ पर होस्ट किया जाता है। गिटहब जेकिल परियोजनाओं का भी समर्थन करता है जहां गिट में परिवर्तन जोड़े जाने पर यह स्वचालित रूप से साइट बनाता है।

भाषाएँ
कई सर्वर-साइड स्क्रिप्टिंग भाषाएँ उपलब्ध हैं, जिनमें सम्मिलित हैं:
 * एक्टिव वीएफपी (*.avfp)
 * सक्रिय सर्वर पृष्ठ (*.asp)
 * ASP.NET वेब प्रपत्र (*.aspx)
 * ASP.NET वेब पृष्ठ (*.cshtml, *.vbhtml)
 * कोल्डफ्यूजन मार्कअप लैंग्वेज (*.cfm)
 * जाओ (प्रोग्रामिंग भाषा) (*.go)
 * गुगल ऐप्स स्क्रिप्ट (* .gs)
 * हैक (प्रोग्रामिंग भाषा) (* .php)
 * हास्केल (प्रोग्रामिंग भाषा) (*.hs) (उदाहरण: यसोड (वेब ​​फ्रेमवर्क))
 * जावा (प्रोग्रामिंग भाषा) (*.jsp, *.do) जावा सर्वर पृष्ठों के माध्यम से
 * सर्वर-साइड जावास्क्रिप्ट (*.ssjs, *.js)  का उपयोग कर जावास्क्रिप्ट (उदाहरण: Node.js)
 * कमंद (प्रोग्रामिंग भाषा) (*.lasso)
 * लुआ (प्रोग्रामिंग भाषा) (*.lp *.op *.lua)
 * पार्सर (प्रोग्रामिंग भाषा) (*.p)
 * CGI.pm मॉड्यूल के माध्यम से पर्ल (*.cgi, *.ipl, *.pl)
 * पीएचपी (*.php, *.php3, *.php4, *.phtml)
 * पायथन (प्रोग्रामिंग लैंग्वेज) (*.py) (उदाहरण: पिरामिड (वेब ​​फ्रेमवर्क), फ्लास्क (वेब ​​फ्रेमवर्क), जैंगो (वेब ​​फ्रेमवर्क))
 * आर (प्रोग्रामिंग भाषा) (*.rphtml)
 * रूबी (प्रोग्रामिंग भाषा) (*.rb, *.rbw) (उदाहरण: रूबी ऑन रेल्स)
 * टीसीएल (प्रोग्रामिंग भाषा) (*.tcl)
 * वेबडीएनए (*.dna,*.tpl)
 * ओपनएज एडवांस्ड बिजनेस लैंग्वेज (*.r,*.w)

यह भी देखें

 * क्लाइंट-साइड स्क्रिप्टिंग
 * सामग्री प्रबंधन प्रणाली (सीएमएस)
 * एज साइड सम्मिलित है
 * जावा सर्वर पृष्ठ
 * नोड.जेएस
 * नेक्स्ट.जेएस
 * वेब डिजाइन एवं वेब विकास की रूपरेखा
 * पर्ल/प्लैक
 * पीएचपी
 * सर्वर साइड सम्मिलित है (एसएसआई)
 * वेब विकास