कॉमन गेटवे इंटरफेस

**कॉमन गेटवे इंटरफेस** **CGI** एक बाहरी एप्लीकेशन सॉफ्टवेयर का सूचना देने वाले सर्वर के साथ संपर्क साधने के लिए एक मानक प्रोटोकॉल है, जो कि आमतौर पर एक वेब सर्वर होता है।

इस सूचना देने वाले सर्वर का कार्य, आउटपुट/परिणाम (क्लाईंट वेब ब्राउज़र के अनुरोध के मामले में वेब सर्वर) के द्वारा अनुरोध का जवाब देना है। हर बार एक अनुरोध प्राप्त होने पर, सर्वर अनुरोध का विश्लेषण करता है और उचित उत्तर देता है। ऐसा करने के लिए सर्वर द्वारा निम्नलिखित दो बुनियादी तरीके प्रयुक्त किये जाते हैं:

* यदि अनुरोध डिस्क पर संग्रहीत किसी फाईल को पहचानता है तो उस फ़ाइल की सामग्री को वापस कर देता है। 
* यदि अनुरोध एक करने योग्य कमांड और संभवतः तर्क को पहचानता है, तो यह उस कमांड को चलाता है और उसका परिणाम दिखाता है।

CGI दूसरे तरीके को करने का मानक ढंग परिभाषित करता है। यह परिभाषित करता है कि कैसे सर्वर के बारे में जानकारी और अनुरोध, तर्क तथा स्थिति के अनुसार वेरिएबल के रूप में भेजे जाते हैं और कैसे कमांड हैडर के रूप में परिणाम (जैसे टाइप के रूप में) की अतिरिक्त जानकारी भेज सकते हैं।

## इतिहास
1993 में वर्ल्ड वाइड वेब (WWW) सीमित, किन्तु तेजी से बढ़ रहा था। WWW सॉफ्टवेयर डेवलपर्स और वेब साइट डेवलपर्स www-टॉक मेलिंग सूची के द्वारा एक दूसरे के संपर्क में रहते थे, इसलिए इस तरह संपर्क साधने के लिए कमांड लाइन चलाने के एक मानक पर सहमति हुई। CGI विवरणी में विशेष रूप से वर्णित योगदानकर्ता निम्नलिखित हैं:

* रॉब मैककूल (NCSA HTTPd वेब सर्वर के लेखक) 
* जॉन फ्रैंक्स (GN वेब सर्वर के लेखक) 
* ऐरी ल्यूटोनेन (CERN httpd वेब सर्वर के डेवलपर) 
* टोनी सैंडर्स (प्लेक्सस वेब सर्वर के लेखक) 
* जॉर्ज फिलिप्स (ब्रिटिश कोलंबिया विश्वविद्यालय में वेब सर्वर की देखभाल करने वाले) 
रॉब मैककूल ने प्रारंभिक विशेषताओं का मसौदा तैयार किया और NCSA इसे अब भी होस्ट करता है। यह बहुत से सर्वरों में तेजी से लागू किया गया था।

## उदाहरण
CGI कार्यक्रम का एक उदाहरण एक वाईकी को लागू करना है। यूज़र एजेंट एक प्रविष्टि के नाम का अनुरोध करता है; सर्वर प्रविष्टि के पृष्ठ (यदि मौजूद है) से उसका स्रोत प्राप्त करेगा, इसे HTML में बदलेगा और परिणाम भेजेगा.

## क्रियान्वयन
वेब सर्वर के नज़रिए से, कुछ लोकेटर (ढूढने वाली साईट्स), जैसे  एक प्रोग्राम में CGI द्वारा चलने के लिए परिभाषित किये गये हैं। जब URL के लिए अनुरोध प्राप्त होता है तो इस से सम्बंधित कार्यक्रम चलाया जाता है।

डाटा स्थिति के अनुसार वेरिएबल का प्रयोग कर के प्रोग्राम में डाला जाता है। यह विशिष्ट चालन के विपरीत है, जहां कमांड लाइन तर्क प्रयोग किये जाते हैं। HTTP PUT या POST, के मामले में, उपयोगकर्ता द्वारा डाला गया डाटा मानक इनपुट के माध्यम से प्रोग्राम को उपलब्ध कराया जाता है।

वेब सर्वर में डायरेक्टरी ट्री के आधार पर एक **cgi-bin** डायरेक्टरी होती है जो CGI द्वारा मांगी जाने वाली चलाने योग्य (एग्जीक्यूटेबल) फ़ाइलों का संग्रहण रखती है।

प्रोग्राम वेब सर्वर पर मानक उत्तर के रूप में परिणाम भेजता है, जिसके शुरू में एक हैडर और एक रिक्त पंक्ति होती है।

### हैडर का प्रारूप
हैडर उसी तरह से कूटबद्ध होता है जैसे एक HTTP हैडर और इसमें भेजे गये दस्तावेज़ का MIME प्रकार भी शामिल होना चाहिए।  हैडर आमतौर पर परिणाम के साथ उपयोगकर्ता को आगे भेजे जाते हैं, जिसे वेब सर्वर द्वारा प्रदान किया जाता है।

## कमियाँ
यदि किसी मामले में CGI कॉल में स्क्रिप्टिंग भाषा प्रयुक्त होती है जैसे कि csh या पर्ल, तो कोडिंग त्रुटियों के परिणामस्वरूप कोड इंजेक्शन जोखिम की संभावना बढ़ जाती है।

कमांड कॉलिंग का आम तौर पर अर्थ है एक नव निर्मित प्रक्रिया का आह्वान. प्रक्रिया को शुरू करने में, परिणाम उत्पन्न करने के वास्तविक कार्य की अपेक्षा अधिक समय तथा मेमोरी खर्च हो सकती है, खासकर जब प्रोग्राम को अभी इंटरप्रिटेट या कम्पाईल करना बाकी है। यदि प्रोग्राम को अक्सर चलाया जाता है तो काम के बोझ से वेब सर्वर जल्दी नष्ट हो सकते हैं। बहरहाल, इस बोझ को कम्पाईल किये हुए CGI प्रोग्रामों का प्रयोग कर के कम किया जा सकता है जैसे कि CGI के साथ पर्ल या अन्य स्क्रिप्टिंग भाषाओँ के स्थान पर C/C++, का प्रयोग किया जा सकता है। प्रदर्शन से सम्बंधित ऐसे मुद्दे आम तौर पर केवल उन मशीनों पर एक चिंता का विषय है जिन पर अत्यधिक कार्यभार होता है।

### विकल्प
इसका इलाज़ करने के लिए कई दृष्टिकोण अपनाए जा सकते हैं:

* लोकप्रिय वेब सर्वरों ने अपना खुद का विस्तार तंत्र विकसित किया है जो कि तीसरे पक्ष के सॉफ़्टवेयर को वेब सर्वर के अंदर स्वयं चलने की अनुमति देता है, उदाहरण के रूप में - अपाचे मॉड्यूल, नेटस्केप NSAPI प्लग-इन, IIS ISAPI प्लग इन. यद्यपि ये इंटरफेस अभी CGI जैसे निर्धारित मानकों तक नहीं पहुंचे हैं, फ़िर भी इन्हें पब्लिश किया गया तथा कई वेब सर्वरों पर आंशिक रूप से लागू किया गया है।
* साधारण कॉमन गेटवे इंटरफ़ेस या SCGI
* FastCGI एकल, लंबी चलने वाली प्रक्रिया को अनुमति प्रदान करते हैं ताकि CGI प्रोग्रामिंग मॉडल के निकट रहते हुए व सरलता को बनाए रखते हुए, एक से अधिक उपयोगकर्ता के अनुरोध को संभाला जा सके; साथ ही साथ प्रत्येक अनुरोध के लिए एक नई प्रक्रिया बनाने का CGI खर्च कम किया जा सके। एक एप्लीकेशन को वेब सर्वर प्लग-इन में बदलने के विपरीत, FastCGI एप्लीकेशन वेब सर्वर पर स्वतंत्र होते हैं।

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

## इन्हें भी देखें

* FastCGI 
* SCGI 
* WSGI 
* एप्लीकेशन सर्वर 
* कंप्यूटर मानकों की सूची

## सन्दर्भ

## बाहरी कड़ियाँ

* NCSA पर ''कॉमन गेटवे इंटरफ़ेस''  
* W3.org पर cgi मानक. 
* RFC3875: कॉमन गेटवे इंटरफेस (CGI) संस्करण 1.1 
* CGI अनुरोध पार्स करने और HTML उत्तर उत्पन्न करने के लिए Cgicc, FSF C++ पुस्तकालय 
* CGI, CGI अनुरोध पार्स करने और HTML उत्तर उत्पन्न करने के लिए एक मानक पर्ल मॉड्यूल 
* qDecoder C/C++ वेब एप्लीकेशन इंटरफ़ेस

श्रेणी:सर्वर
श्रेणी:गूगल परियोजना