कॉमन गेटवे इंटरफेस (CGI) क्या है?


745

CGI एक कॉमन गेटवे इंटरफ़ेस है। जैसा कि नाम से पता चलता है, यह सब कुछ के लिए एक "सामान्य" गेटवे इंटरफ़ेस है। यह नाम से इतना तुच्छ और भोला है। मुझे लगता है कि मुझे यह समझ में आया और मैंने हर बार इस शब्द का सामना किया। लेकिन स्पष्ट रूप से, मैंने नहीं किया। मैं अभी भी असमंजस में हूँ।

मैं वेब विकास अनुभव के साथ एक PHP प्रोग्रामर हूँ।

उपयोगकर्ता --- (क्लाइंट) पेज के लिए अनुरोध ---> वेबसर्वर (- एम्बेडेड PHP दुभाषिया) ----> सर्वर साइड (PHP) स्क्रिप्ट ---> MySQL सर्वर।

अब मेरा PHP स्क्रिप्ट MySQL सर्वर और MATLAB सर्वर और कुछ अन्य सर्वर से परिणाम प्राप्त कर सकते हैं।

तो, अब PHP स्क्रिप्ट CGI है? क्योंकि वेबसर्वर और अन्य सभी सर्वरों के बीच इसका इंटरफ़ेस? मुझे नहीं पता। कभी-कभी वे सीजीआई, एक प्रौद्योगिकी और अन्य बार वे सीजीआई को एक कार्यक्रम या कुछ अन्य सर्वर कहते हैं।

  • वास्तव में CGI क्या है?

  • क्या बड़ी बात है /cgi-bin/*.cgi? इससे क्या हो रहा है? मुझे नहीं पता कि इस cgi-binनिर्देशिका के लिए सर्वर पर क्या है । मुझे नहीं पता कि उनके पास * .cgi एक्सटेंशन क्यों हैं।

  • पर्ल हमेशा रास्ते में क्यों आता है CGI और पर्ल (भाषा)। मुझे यह भी पता नहीं है कि इन दोनों के साथ क्या हो रहा है। लगभग हर समय मैं इन दोनों को "सीजीआई और पर्ल" के संयोजन में सुनता रहता हूं। यह पुस्तक पर्ल के साथ एक और महान उदाहरण CGI प्रोग्रामिंग है । क्यों नहीं "CGI PHP / JSP / ASP के साथ प्रोग्रामिंग"? मैंने ऐसी चीजें कभी नहीं देखीं।

  • सी में सीजीआई प्रोग्रामिंग , मुझे बहुत भ्रमित करता है। " C में " ?? गंभीरता से ?? मैं नहीं जानता कि मैं क्या कहूं। मैं ज़रा उलझन में हूँ। " C में " ?? इससे सब कुछ बदल जाता है। कार्यक्रम को संकलित करने और निष्पादित करने की आवश्यकता है। यह वेब प्रोग्रामिंग के बारे में मेरे विचार को पूरी तरह से बदल देता है। मैं कब संकलन करूं? प्रोग्राम को कैसे निष्पादित किया जाता है (क्योंकि यह एक मशीन कोड होगा, इसलिए इसे एक स्वतंत्र प्रक्रिया के रूप में निष्पादित करना होगा)। यह वेब सर्वर के साथ कैसे संवाद करता है? भारतीय दंड संहिता? और सॉकेट प्रोग्रामिंग का उपयोग करते हुए सभी सर्वर (मेरे उदाहरण MATLAB और MySQL में) के साथ इंटरफेस? मैं हार गया हूं!!

  • लोगों का कहना है कि CGI पदावनत है और अब उपयोग में नहीं है। ऐसा क्या? लेटेस्ट अपडेट क्या है?

एक बार, मैं एक ऐसी स्थिति में भाग गया, जहाँ मुझे वेब सर्वर (Apache HTTPD) को HTTP PUT अनुरोध देना पड़ा। इसकी एक लंबी पीठ है। इसलिए, जहां तक ​​मुझे याद है कि मैंने यही किया है:

  1. Apache HTTPD की कॉन्फ़िगरेशन फ़ाइल को संपादित करने के लिए वेबसर्वर को कुछ के लिए सभी HTTP PUT अनुरोधों को put.phpपास करने के लिए कहा (मुझे ( HTTP URL लिखना था)

  2. अनुरोध को संभालने के लिए put.php लागू करें (फ़ाइल को बताए गए स्थान पर सहेजें)

लोगों ने कहा कि मैंने एक CGI स्क्रिप्ट लिखी है। सच में, मेरे पास कोई सुराग नहीं था कि वे किस बारे में बात कर रहे थे।

  • क्या मैंने वास्तव में CGI स्क्रिप्ट लिखी थी?

मुझे आशा है कि आप समझ गए होंगे कि मेरा भ्रम क्या है। (क्योंकि मैं खुद नहीं जानता कि मैं कहाँ उलझन में हूँ)। मैं आप लोगों से अनुरोध करता हूं कि आप अपना उत्तर यथासंभव सरल रखें। मैं वास्तव में किसी भी फैंसी तकनीकी शब्दावली को नहीं समझ सकता। कम से कम इस मामले में तो नहीं।

संपादित करें:

मुझे यह अद्भुत ट्यूटोरियल मिला "सीजीआई प्रोग्रामिंग इज़ सिम्पल!" - CGI ट्यूटोरियल , जो अवधारणाओं को सरलतम तरीके से समझाता है । इस लेख को पढ़ने के बाद आप वास्तविक कोड नमूनों के साथ अपनी समझ के पूरक के लिए C में CGI प्रोग्रामिंग के साथ प्रारंभ करना पढ़ना चाहते हैं। मैंने इस ट्यूटोरियल के लिंक को विकिपीडिया के लेख में भी जोड़ा है: http://en.wikipedia.org/wiki/Common_Gateway_Interface


9
मैंने पहले ही सीजीआई को कोबोल में देखा है। कोई कीडिंग नहीं!
ल्यूक एम

@Luc एम। इच्छुक हैं। आप कौन से CGI का मतलब है (यह देखते हुए कि LINQ में एक रेस्क्यूस्टर मौजूद है ...)?
जो

15
@claws: मुख्य रूप से पुराने स्कूल के लोग, किसी भी कोड को कहेंगे, भले ही निष्पादन की वास्तविक विधि, वेबसर्वर CGI के माध्यम से निष्पादित की गई हो। आपने जो वास्तव में लिखा है वह एक PHP स्क्रिप्ट है, जिसे CGI प्रोटोकॉल के माध्यम से निष्पादित किया जा सकता है या नहीं भी किया जा सकता है। सीजीआई के अस्पष्ट अर्थ, कोड को निष्पादित करने के लिए एक प्रोटोकॉल और कोड जिसे प्रोटोकॉल के माध्यम से निष्पादित किया जा रहा है (जो बाद में किसी भी वेब-निष्पादित कोड का मतलब सामान्यीकृत हो गया)
विंको वर्सलोविच

1
90 के दशक के मध्य में मैंने हाइपरकार्ड में CGI लिपियों के एक जोड़े को लिखा
नील डेविस

@ जो मुझे कभी नोटिफिकेशन नहीं मिला और आज फिर से इस पोस्ट को पढ़कर मैंने आपका सवाल देखा। सीजीआई के ओपनवीएमएस पर स्वतंत्र निष्पादक के रूप में लिखे गए (कोई ढांचा शामिल या तीसरे पक्ष के आवेदक नहीं ...)
ल्यूक एम

जवाबों:


427

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

अपनी छवि का उपयोग करने के लिए:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

यदि सभी नहीं, तो वेबसर्वर को एक प्रोग्राम को 'CGI' के रूप में निष्पादित करने के लिए कॉन्फ़िगर किया जा सकता है। इसका मतलब यह है कि वेबसर्वर, एक अनुरोध प्राप्त करने पर, डेटा को एक विशिष्ट कार्यक्रम में अग्रेषित करेगा, कुछ पर्यावरण चर और मानक इनपुट और मानक आउटपुट के माध्यम से मापदंडों को निर्धारित करेगा ताकि कार्यक्रम को पता चल सके कि कहां और क्या देखना है।

मुख्य लाभ यह है कि आप वेब से कोई भी निष्पादन योग्य कोड चला सकते हैं, यह देखते हुए कि वेबसर्वर और प्रोग्राम दोनों जानते हैं कि CGI कैसे काम करता है। इसलिए आप सीजी या बैश में नियमित सीजीआई-सक्षम वेबसर्वर के साथ वेब प्रोग्राम लिख सकते हैं। वह, और यह कि अधिकांश प्रोग्रामिंग वातावरण आसानी से मानक इनपुट, मानक आउटपुट और पर्यावरण चर का उपयोग कर सकते हैं।

आपके मामले में, आप PHP के लिए विशिष्ट, आपकी लिपियों और वेबसर्वर के बीच संचार के साधन के लिए विशिष्ट रूप से एक और उपयोग करते हैं, यह, जैसा कि आप अपने प्रश्न में अच्छी तरह से उल्लेख करते हैं, एक एम्बेडेड दुभाषिया है जिसे mod_php कहा जाता है।

तो, अपने सवालों का जवाब दे:

वास्तव में CGI क्या है?

ऊपर देखो।

/Cgi-bin/*.cgi के साथ बड़ा सौदा क्या है? इसके साथ क्या हुआ? मुझे नहीं पता कि सर्वर के लिए यह cgi-bin डायरेक्टरी क्या है। मुझे नहीं पता कि उनके पास * .cgi एक्सटेंशन क्यों हैं।

यह cgi कार्यक्रमों के लिए पारंपरिक स्थान है, कई webservers इस निर्देशिका के साथ आते हैं जो CGI कार्यक्रमों के रूप में सभी बायनेरिज़ को निष्पादित करने के लिए कॉन्फ़िगर किए गए हैं। .Cgi एक्सटेंशन CGI के माध्यम से काम करने के लिए अपेक्षित निष्पादन योग्य को दर्शाता है।

पर्ल हमेशा रास्ते में क्यों आता है CGI और पर्ल (भाषा)। मुझे यह भी नहीं पता कि इन दोनों के साथ क्या हुआ। लगभग हर समय मैं इन दोनों को "सीजीआई और पर्ल" के संयोजन में सुनता रहता हूं। यह पुस्तक पर्ल के साथ सीजीआई प्रोग्रामिंग का एक और शानदार उदाहरण है "PHP / JSP / ASP के साथ CGI प्रोग्रामिंग" क्यों नहीं। मैंने ऐसी चीजें कभी नहीं देखीं।

क्योंकि पर्ल प्राचीन है (PHP, JSP और ASP की तुलना में पुराना है जो सभी CGI के पुराने होने पर अस्तित्व में आया था, पर्ल तब मौजूद था जब CGI नया था) और CGI के माध्यम से गतिशील वेबपृष्ठों की सेवा करने के लिए एक बहुत अच्छी भाषा होने के लिए काफी प्रसिद्ध हो गया। आजकल एक वेबसर्वर में पर्ल को चलाने के लिए अन्य विकल्प हैं, मुख्य रूप से mod_perl

सी में प्रोग्रामिंग सीजीआई मुझे बहुत भ्रमित करता है। सी में ?? गंभीरता से ?? मैं नहीं जानता कि मैं क्या कहूं। मैं "बस उलझन में हूँ।" C "?? यह सब कुछ बदल जाता है। प्रोग्राम को संकलित और निष्पादित करने की आवश्यकता है। यह वेब प्रोग्रामिंग के बारे में मेरा दृष्टिकोण पूरी तरह से बदल देता है। मैं कब संकलन करता हूं? प्रोग्राम कैसे निष्पादित होता है (क्योंकि यह एक होगा?" मशीन कोड, इसलिए इसे एक स्वतंत्र प्रक्रिया के रूप में निष्पादित किया जाना चाहिए)। यह वेब सर्वर के साथ कैसे संवाद करता है? IPC? और सॉकेट प्रोग्रामिंग का उपयोग करके सभी सर्वरों (मेरे उदाहरण MATLAB और MySQL में) के साथ इंटरफेस? मैं खो गया हूँ? !!

आप निष्पादन योग्य को एक बार संकलित करते हैं, वेबसर्वर प्रोग्राम को निष्पादित करता है और कार्यक्रम के अनुरोध में डेटा पास करता है और प्राप्त प्रतिक्रिया को आउटपुट करता है। सीजीआई निर्दिष्ट करता है कि प्रत्येक अनुरोध के अनुसार एक कार्यक्रम उदाहरण लॉन्च किया जाएगा। यही कारण है कि आजकल सीजीआई अक्षम और अप्रचलित है।

उनका कहना है कि सीजीआई पदावनत है। इसका और कोई उपयोग नहीं है। ऐसा है क्या? इसका ताजा अपडेट क्या है?

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


24
अधिक विशेष रूप से, यह वर्णन करता है कि पर्यावरण चर (जैसे अनुरोध प्रकार, दूरस्थ आईपी पता) में सूचना का अनुरोध कैसे पारित किया जाता है, कैसे रेकस्ट बॉडी को मानक इनपुट के माध्यम से पारित किया जाता है, और मानक आउटपुट के माध्यम से कैसे प्रतिक्रिया पारित की जाती है। आप विवरण के लिए CGI विनिर्देश ( hoohoo.ncsa.illipedia.edu/cgi ) का उल्लेख कर सकते हैं ।
दफ

3
Server side Programआपके चित्र में मान लेना मेरी PHP स्क्रिप्ट है। इसलिए, मैंने कभी कोई सीजीआई प्रोग्रामिंग नहीं की? क्योंकि मैंने कभी भी ऐसा कुछ नहीं लिखा जो वेबसर्वर और मेरी PHP स्क्रिप्ट के बीच आता हो। अरे नहीं!! यह मुझे मारता है।
पंजे

4
PHP अभी भी CGI प्रोटोकॉल पर आधारित है, $ _SERVER की अधिकांश सामग्री CGI कल्पना से सीधी है। और "सीजीआई प्रोग्रामिंग" का मतलब हमेशा कार्यक्रम को अनुरोध करना था, न कि प्रोटोकॉल को लागू करना। यदि आपने समझाया कि आप 1993 के युग के प्रोग्रामिंग प्रोग्रामिंग अग्रणी PHP के साथ क्या करते हैं, तो वह इसे CGI प्रोग्रामिंग का उन्नत (हालांकि संभवतः निराला) रूप मानेंगे।
माइकल बोर्गवर्ड

5
@ मिचेल: लेकिन mod_php के माध्यम से चलने पर CGI बिल्कुल भी नहीं है (भले ही इसके आधार पर)। और मैं सहमत हूं कि CGI प्रोटोकॉल और इसके माध्यम से निष्पादित स्क्रिप्ट दोनों को संदर्भित करता है।
विंको वर्सालोविच

2
@Vinko Vrsalovic: यदि CGI पर्ल, C या अन्य भाषाओं के लिए एक इंटरफ़ेस है जिसे वेब सर्वर में निष्पादित करने के लिए PHP की तुलना में Apache चलाने के लिए किस इंटरफ़ेस का उपयोग किया जाता है ???????? और PHP CGI विनिर्देशों के अंतर्गत आता है ??
हार्डिक

63

वास्तव में CGI क्या है?

वेब सर्वर के लिए एक प्रोग्राम (उदाहरण के लिए, उदाहरण के लिए, एक फ़ाइल) से अपना डेटा प्राप्त करने के लिए इसका मतलब है।

/Cgi-bin/*.cgi के साथ बड़ा सौदा क्या है?

कोई बड़ी बात नहीं। यह सिर्फ एक सम्मेलन है।

मुझे नहीं पता कि सर्वर के लिए यह cgi-bin डायरेक्टरी क्या है। मुझे नहीं पता कि उनके पास * .cgi एक्सटेंशन क्यों हैं।

सर्वर को यह पता होना चाहिए कि फ़ाइल के साथ क्या करना है (यानी इसे केवल सेवा करने के लिए कुछ करने के बजाय निष्पादित करने के लिए एक कार्यक्रम के रूप में मानें)। .Html एक्सटेंशन होने के कारण यह टेक्स्ट / html सामग्री प्रकार का उपयोग करने के लिए कहता है। -सीजी एक्सटेंशन होने के कारण इसे इसे प्रोग्राम के रूप में चलाने के लिए कहा जाता है।

निष्पादनयोग्य को अलग निर्देशिका में रखने से गलत फ़ाइलों को निष्पादित करने और / या सीजीआई कार्यक्रमों की सेवा करने के खिलाफ कुछ अतिरिक्त सुरक्षा मिलती है क्योंकि सर्वर गलत हो जाता है।

पर्ल हमेशा रास्ते में क्यों आता है

यह नहीं है पर्ल सीजीआई के समान ही बड़ा और लोकप्रिय था।

मैंने सालों तक पर्ल सीजीआई का उपयोग नहीं किया है। मैं लंबे समय से mod_perl का उपयोग कर रहा था, और इन दिनों FastCGI के साथ PSGI / Plack की ओर रुख कर रहा हूं।

यह पुस्तक पर्ल के साथ सीजीआई प्रोग्रामिंग का एक और शानदार उदाहरण है "PHP / JSP / ASP के साथ CGI प्रोग्रामिंग" क्यों नहीं।

CGI बहुत कुशल नहीं है। Webservers से कार्यक्रमों पर बात करने के लिए बेहतर तरीके PHP के समान समय के साथ-साथ आए। कार्यक्रमों से बात करने के लिए JSP और ASP अलग - अलग तरीके हैं।

सी में प्रोग्रामिंग सीजीआई मुझे बहुत भ्रमित करता है। सी में ?? गंभीरता से ??

यह एक प्रोग्रामिंग भाषा है, क्यों नहीं?

मैं कब संकलन करूं?

  1. कोड लिखें
  2. संकलन
  3. URL तक पहुँचें
  4. वेबसर्वर कार्यक्रम चलाता है

प्रोग्राम कैसे निष्पादित होता है (क्योंकि यह एक मशीन कोड होगा, इसलिए इसे एक स्वतंत्र प्रक्रिया के रूप में निष्पादित करना होगा)।

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

यह वेब सर्वर के साथ कैसे संवाद करता है? भारतीय दंड संहिता?

STDIN / STDOUT और पर्यावरण चर - जैसा कि CGI विनिर्देश में परिभाषित किया गया है।

और सॉकेट प्रोग्रामिंग का उपयोग करते हुए सभी सर्वर (मेरे उदाहरण MATLAB और MySQL में) के साथ इंटरफेस?

जो भी तरीके आपको पसंद हैं और जो समर्थित हैं, उनका उपयोग करना।

वे कहते हैं कि सीजीआई मूल्यह्रास है। इसका कोई और उपयोग नहीं है। ऐसा है क्या?

CGI अक्षम, धीमा और सरल है। इसका उपयोग शायद ही कभी किया जाता है, जब इसका उपयोग किया जाता है, तो यह इसलिए है क्योंकि यह सरल है। यदि प्रदर्शन कोई बड़ी बात नहीं है, तो सादगी बहुत मायने रखती है।

इसका ताजा अपडेट क्या है?

1.1


1. कोड लिखें 2. संकलित करें 3. एक्सेस URL 4. वेबसर्वर प्रोग्राम चलाता है। || लेकिन वेबसर्वर को कैसे पता चलता है कि आप संकलित निष्पादन योग्य कार्यक्रम कहां रखते हैं? यह कैसे पता चलता है कि कौन से निष्पादन योग्य कार्यक्रम (उन सभी के बीच) को चलाना है?
पचेरियर

@Pacerier - उसी तरह जिसे यह पता होता है कि कौन सी स्टैटिक फाइल क्लाइंट को भेजनी है अगर स्टैटिक फाइल का अनुरोध किया जाता है।
क्वेंटिन

41

CGI एक वेब सर्वर (HTTP सर्वर) और कुछ प्रकार के निष्पादन योग्य प्रोग्राम के बीच एक इंटरफ़ेस विनिर्देश है जो किसी विशेष अनुरोध को संभालने के लिए है।

यह वर्णन करता है कि उस अनुरोध के कुछ गुणों को उस प्रोग्राम के वातावरण में कैसे संचारित किया जाना चाहिए और प्रोग्राम को सर्वर पर प्रतिक्रिया को कैसे संवाद करना चाहिए और कैसे सर्वर को मूल HTTP अनुरोध के लिए एक वैध उत्तर बनाने के लिए प्रतिक्रिया को 'पूरा' करना चाहिए।

कुछ समय के लिए CGI एक IETF इंटरनेट ड्राफ्ट था और इस तरह की समाप्ति की तारीख थी। यह बिना किसी अपडेट के समाप्त हो गया, इसलिए कोई सीजीआई 'मानक' नहीं था। यह अब एक सूचनात्मक RFC है, लेकिन इस तरह के दस्तावेजों के रूप में आम प्रथा है और यह एक मानक नहीं है। rfc3875.txt , rfc3875.html

CGI इंटरफ़ेस को लागू करने वाले प्रोग्राम किसी भी भाषा में लक्ष्य मशीन पर चलने योग्य लिखे जा सकते हैं। उन्हें पर्यावरण चर और आमतौर पर मानक इनपुट तक पहुंचने में सक्षम होना चाहिए और वे मानक आउटपुट पर अपना आउटपुट उत्पन्न करते हैं

सी जैसी संकलित भाषाओं का आमतौर पर उपयोग किया जाता था क्योंकि सीजीआई वातावरण को आसान बनाने के लिए पुस्तकालयों का उपयोग करते हुए अक्सर प्रति लिपि जैसी भाषाओं का उपयोग किया जाता था।

CGI का एक बड़ा नुकसान यह है कि प्रत्येक अनुरोध के लिए एक नया कार्यक्रम बनाया जाता है ताकि अनुरोधों के बीच स्थिति बनाए रखना एक बड़ा प्रदर्शन मुद्दा हो सके। राज्य कुकीज़ में संभाला जा सकता है या एक URL में इनकोड किया जा सकता है, लेकिन अगर यह बड़ा हो जाता है तो इसे कहीं और संग्रहीत किया जाना चाहिए और एन्कोडेड url जानकारी या कुकी से कुंजीबद्ध किया जाना चाहिए। प्रत्येक सीजीआई आह्वान को फिर स्टोर से स्टोर किए गए राज्य को फिर से स्टोर करना होगा।

इस कारण से, और अनुरोधों और सत्रों के लिए बहुत ही सरल इंटरफ़ेस के लिए, वेब सर्वर और अनुप्रयोगों के बीच बेहतर एकीकृत वातावरण बहुत अधिक लोकप्रिय हैं। अपाचे के साथ आधुनिक php कार्यान्वयन जैसा वातावरण वेब सर्वर के साथ लक्ष्य भाषा को बहुत बेहतर तरीके से एकीकृत करता है और अनुरोध और सत्र वस्तुओं तक पहुंच प्रदान करता है जो कुशलतापूर्वक http अनुरोधों की सेवा करने के लिए आवश्यक हैं। वे HTTP अनुरोधों को संभालने के लिए 'प्रोग्राम' लिखने के लिए बहुत आसान और समृद्ध तरीका प्रदान करते हैं।

चाहे आपने CGI स्क्रिप्ट लिखी हो, लेकिन व्याख्या पर निर्भर करता है। यह निश्चित रूप से एक का काम करता है, लेकिन यह एक मॉड्यूल के रूप में php को चलाने के लिए बहुत अधिक सामान्य है जहां स्क्रिप्ट और सर्वर के बीच इंटरफ़ेस कड़ाई से CGI इंटरफ़ेस नहीं है।


1
नाक में दम करना। मैंने यह लिखना तब शुरू किया जब कोई अन्य उत्तर नहीं थे, लेकिन मुझे बुलाया गया। अब यह सूची में # 8 के बारे में है। मैंने इसे हटाने की इच्छा नहीं की है, मैं बाद में आकर इसे हटा दूँगा।
सीबी बेली

6
अरे .. कृपया इसे हटाएं नहीं। यह कुछ चीजों को अधिक स्पष्ट तरीके से कहता है। मुझे यह मददगार लगा। हो सकता है कि कुछ अन्य लोग भी ऐसा कर पाएं। :)
पंजे

1
ठीक है, मैं इसे थोड़ी देर के लिए छोड़ दूंगा। यह शायद अच्छा होगा अगर किसी ने फुलर उत्तरों में से किसी एक में 'बेहतर' मार्ग को एकीकृत किया, हालांकि। तब हमें अधिक निश्चित उत्तर मिल सकता है।
सीबी बेली

18

CGI को RFC 3875 में निर्दिष्ट किया गया है , हालांकि यह मूल NCSA दस्तावेज़ का बाद का "आधिकारिक" कोडीकरण है । मूल रूप से, सीजीआई किसी भी भाषा में किसी भी प्रोग्राम को प्रोसेस करने के लिए एक वेबसर्वर से एक HTTP अनुरोध के बारे में डेटा पास करने के लिए एक प्रोटोकॉल को परिभाषित करता है। जिस समय यह युक्ति लिखी गई थी (1993), ज्यादातर वेब सर्वरों में केवल स्थिर पृष्ठ होते थे, "वेब ऐप्स" एक दुर्लभ और नई चीज थी, इसलिए उन्हें "सामान्य" स्थिर सामग्री से अलग रखना स्वाभाविक लगता था, जैसे कि एक में cgi-binस्थिर सामग्री के अलावा निर्देशिका, और उन्हें अंत में .cgi

इस समय, यहाँ भी PHP की तरह कोई समर्पित "वेब प्रोग्रामिंग लैंग्वेज" नहीं थी, और C वर्चस्व वाली पोर्टेबल प्रोग्रामिंग लैंग्वेज थी - इसलिए कई लोगों ने अपनी CGI स्क्रिप्ट सी में लिखी थी। लेकिन पर्ल जल्दी ही इस तरह के लिए एक बेहतर फिट बन गए। बात और CGI कुछ समय के लिए पर्ल का पर्याय बन गया। फिर जावा सर्वलेट्स, PHP और दूसरों का एक समूह आया और पर्ल के बाजार में हिस्सेदारी के बड़े हिस्से पर कब्जा कर लिया।


PHP एक "समर्पित वेब प्रोग्रामिंग भाषा" क्यों है? PHP एक सामान्य उद्देश्य की भाषा है और लोग इसे UI ऐप्स के लिए भी उपयोग कर रहे हैं।
पचेरियर

@ स्पेसर: यह वेब पेज बनाने के लिए एक प्रोग्रामिंग भाषा होने के लिए डिज़ाइन किया गया था, और यही 99.9% उपयोगकर्ता इसका उपयोग करते हैं। यह इसके नाम पर भी है । किसी और चीज का दावा करना केवल व्यर्थ बाल-विभाजन है। यदि आप इसे यूआई ऐप्स, वैज्ञानिक कंप्यूटिंग या एम्बेडेड प्रोग्रामिंग के लिए उपयोग कर रहे हैं, तो ठीक है, खुश रहें, किसी के कहने पर आपको अनुमति नहीं है।
माइकल बोर्गवर्ड

13

विकिपीडिया में सीजीआई पर एक नजर है । CGI वेब सर्वर और एक बाहरी प्रोग्राम या स्क्रिप्ट के बीच एक प्रोटोकॉल है जो इनपुट को हैंडल करता है और आउटपुट को ब्राउज़र में भेजा जाता है।

CGI वेब सर्वर और संवाद करने का एक सरल तरीका है, अधिक कुछ नहीं, कुछ भी कम नहीं। यहां सर्वर नेटवर्क कनेक्शन और HTTP प्रोटोकॉल का प्रबंधन करता है और प्रोग्राम इनपुट को हैंडल करता है और आउटपुट को ब्राउज़र में भेजा जाता है। CGI स्क्रिप्ट मूल रूप से कोई भी प्रोग्राम हो सकता है जिसे वेबसर्वर द्वारा निष्पादित किया जा सकता है और CGI प्रोटोकॉल का अनुसरण करता है। इस प्रकार सीजीआई कार्यक्रम को लागू किया जा सकता है, उदाहरण के लिए, सी में। हालांकि यह अत्यंत दुर्लभ है, क्योंकि सी कार्य के लिए बहुत अच्छी तरह से अनुकूल नहीं है।

/cgi-bin/*.cgiएक बस एक रास्ता है जहाँ लोग आमतौर पर अपनी CGI स्क्रिप्ट डालते हैं। वेब सर्वर आमतौर पर उस पथ से CGI स्क्रिप्ट लाने के लिए डिफ़ॉल्ट रूप से कॉन्फ़िगर किया गया है।

एक CGI स्क्रिप्ट PHP में भी लागू की जा सकती है, लेकिन सभी PHP प्रोग्राम CGI स्क्रिप्ट नहीं हैं। यदि वेबसर्वर ने PHP दुभाषिया (जैसे Apache में mod_php) को एम्बेड किया है, तो CGI चरण वेब सर्वर और दुभाषिया के बीच अधिक कुशल प्रत्यक्ष प्रोटोकॉल द्वारा छोड़ दिया जाता है।

आपने CGI स्क्रिप्ट को लागू किया है या नहीं, इस पर निर्भर करता है कि वेब सर्वर द्वारा आपकी स्क्रिप्ट को कैसे निष्पादित किया जा रहा है।


12

CGI अनिवार्य रूप से वेब सर्वर के साथ कॉन्फ़िगर किए गए किसी भी दुभाषिया से अनुरोध को पारित करता है - यह पर्ल, पायथन, पीएचपी, रूबी, सी बहुत कुछ भी हो सकता है। Perl दिन में सबसे आम था, यही कारण है कि आप अक्सर इसे CGI के संदर्भ में देखते हैं।

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


2
डाउनवोटिंग नहीं, लेकिन अधिकांश अजगर वेब स्थापित करता है, जहां मैंने mod_wsgi या mod_python पर देखा है।
क्रिस्टोफीडी

यह है कि ज्यादातर लोग CGI शब्द का उपयोग कैसे करते हैं, लेकिन यह शब्द का अर्थ काफी नहीं है।
रीइन्टीरियरपोस्ट

आप कहते हैं कि दुभाषिया लेकिन सी की शायद ही कभी व्याख्या की जाती है और संकलित कार्यक्रमों जैसे सी संकलित कार्यक्रमों का उपयोग सीजीआई के लिए किया जा सकता है।
user34660

11

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

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

अधिकांश PHP स्क्रिप्ट वेब सर्वर प्रक्रिया के माध्यम से चलते हैं mod_php। यह सीजीआई नहीं है।

कार्यक्रम के बाद से सीजीआई धीमा है (और संबंधित दुभाषिया) अनुरोध के अनुसार शुरू किया जाना चाहिए। आधुनिक विकल्प एम्बेडेड निष्पादन हैं, जिसका उपयोग mod_php और लंबे समय से चलने वाली प्रक्रियाओं द्वारा किया जाता है, जिसका उपयोग FastCGI द्वारा किया जाता है। किसी दिए गए भाषा में उन तंत्रों को लागू करने का अपना तरीका हो सकता है, इसलिए CGI का सहारा लेने से पहले आसपास पूछना सुनिश्चित करें।


@Ignacio Vazquez-Abrams: यदि CGI इंटरफ़ेस एक नई प्रक्रिया बनाता है, तो हर बार CGI संसाधन के लिए अनुरोध प्राप्त होता है कि CGI और mod_php के बीच निष्पादन अंतर क्या है ??????? CGI और mod_php समान हैं ???? या क्या PHP स्क्रिप्ट लिखना संभव है जो CGI इंटरफ़ेस के तहत चलते हैं mod_php के तहत नहीं ???
हार्ड

@ हार्दिक: mod_php HTTPd के हिस्से के रूप में चलता है, जो अपनी प्रक्रियाओं के लिए जिम्मेदार है।
इग्नासियो वाज़केज़-अब्राम्स

यह 'बाहरी कार्यक्रम' क्या है? अगर मैं php-fpm के साथ php चलाऊ तो ​​यह दुभाषिया है?
धीमा

@ सर्वर: यह एक मनमाना कार्यक्रम है जो वेब सर्वर नहीं है।
इग्नासियो वाज़केज़-अब्राम्स

@ इग्नासियोविजेक-एब्राम तो क्या यह मान लेना सुरक्षित है कि यह एक interpreterim है जो php-fpm के साथ php चल रहा है?
स्लैयर

7

आप शायद जानना चाहते हैं कि CGI क्या नहीं है, और इसका उत्तर आपके वेब सर्वर के लिए एक MODULE है (यदि मुझे लगता है कि आप रननेग अपाचे हैं)। और यह बड़ा ज्ञान है, क्योंकि CGI की जरूरत है और बाहरी कार्यक्रम, धागा, जो भी एक पर्ल, पीएचपी, सी ऐप सर्वर को इंस्टेंट करने के लिए है, जब आप एक मॉड्यूल के रूप में चलाते हैं, तो वह प्रोग्राम वेब सर्वर (अपाचे) प्रति-से है।

इस सब के कारण बहुत सारे प्रदर्शन, सुरक्षा, पोर्टेबिलिटी के मुद्दे हैं जो खेल में आते हैं। लेकिन यह जानना अच्छा है कि पहले सीजीआई क्या नहीं है, यह समझने के लिए कि यह क्या है।


7

एक वास्तविक जीवन का उदाहरण: एक जटिल डेटाबेस जिसे एक वेबसाइट पर दिखाया जाना चाहिए। चूंकि डेटाबेस को 1986 (!) के आसपास कहीं डिज़ाइन किया गया था, इसलिए डिस्क स्पेस पर सहेजने के लिए बहुत सारे डेटा को विभिन्न तरीकों से पैक किया गया था।

जैसे-जैसे विकास होता गया, डेवलपर्स अब SQL में जटिल डेटा अनुरोधों को अकेले हल नहीं कर सकते थे, उदाहरण के लिए क्योंकि छंटनी वाले अल्गोरिथम असामान्य थे।

तीन समझदार उपाय हैं:

  1. त्वरित और गंदा: बिना डेटा के PHP को भेजें, इसे वहां छाँटें। स्पष्ट रूप से एक बहुत महंगा समाधान है, क्योंकि यह हर बार जब पृष्ठ कहा जाता है दोहराया जाएगा
  2. डेटाबेस इंजन के लिए एक प्लगइन लिखें - लेकिन व्यवस्थापक विदेशी कोड को अपने सर्वर पर चलाने की अनुमति देने के लिए तैयार नहीं था, या
  3. आप प्रोग्राम (C, पर्ल, आदि) और आउटपुट HTML में डेटा प्रोसेस कर सकते हैं। कार्यक्रम स्वयं / cgi-bin में चला जाता है, और वेब सर्वर (उदा। अपाचे) द्वारा सीधे बुलाया जाता है, PHP के माध्यम से नहीं।

CGI सॉल्यूशन # 3 में आपकी स्क्रिप्ट चलाता है और ब्राउज़र को इफेक्ट आउटपुट करता है। आपके पास संकलित प्रोग्राम की गति, SQL की तुलना में बेहतर भाषा का लचीलापन है, और SQL सर्वर को प्लगइन्स लिखने की आवश्यकता नहीं है। (फिर, यह SQL और C के लिए विशिष्ट उदाहरण है)


1
मेरे लिए सबसे अच्छा जवाब, मुझे मिल गया।
डैनियल काट्ज़

7

एक CGI स्क्रिप्ट एक कंसोल / शेल प्रोग्राम है। विंडोज में, जब आप "कमांड प्रॉम्प्ट" विंडो का उपयोग करते हैं, तो आप कंसोल प्रोग्राम निष्पादित करते हैं। जब कोई वेब सर्वर एक CGI स्क्रिप्ट निष्पादित करता है तो यह पर्यावरण चर या "मानक इनपुट" का उपयोग करके कंसोल / शेल प्रोग्राम को इनपुट प्रदान करता है। मानक इनपुट एक कंसोल / शेल प्रोग्राम में डेटा टाइप करने जैसा है; CGI स्क्रिप्ट के मामले में, वेब सर्वर टाइपिंग करता है। CGI स्क्रिप्ट "मानक आउटपुट" का डेटा लिखती है और उस आउटपुट को क्लाइंट (वेब ​​ब्राउज़र) को HTML पेज के रूप में भेजा जाता है। मानक आउटपुट उस आउटपुट की तरह है जिसे आप कंसोल / शेल प्रोग्राम में देखते हैं, सिवाय इसके कि वेब सर्वर इसे पढ़ता है और इसे भेजता है।

एक सीजीआई स्क्रिप्ट को एक ब्राउज़र से निष्पादित किया जा सकता है। URI में आमतौर पर एक क्वेरी स्ट्रिंग शामिल होती है जो CGI स्क्रिप्ट को प्रदान की जाती है। यदि विधि "प्राप्त" है, तो क्वेरी स्ट्रिंग को CGER स्क्रिप्ट में एक पर्यावरण चर में प्रदान किया जाता है जिसे QUERY_STRING कहा जाता है। यदि विधि "पोस्ट" है तो सीजीआई स्क्रिप्ट को मानक इनपुट का उपयोग करके क्वेरी स्ट्रिंग प्रदान की जाती है (सीजीआई स्क्रिप्ट मानक इनपुट से क्वेरी स्ट्रिंग पढ़ता है)।

प्रपत्रों को संसाधित करने के लिए CGI लिपियों का प्रारंभिक उपयोग था। HTML की शुरुआत में, HTML रूपों में आमतौर पर एक "एक्शन" विशेषता होती है और एक बटन "सबमिट" बटन के रूप में निर्दिष्ट होता है। जब सबमिट बटन को धक्का दिया जाता है तो "एक्शन" में निर्दिष्ट यूआरआई को क्वेरी स्ट्रिंग के रूप में भेजे गए फॉर्म के डेटा के साथ सर्वर पर भेजा जाएगा। यदि "एक्शन" एक सीजीआई स्क्रिप्ट को निर्दिष्ट करता है तो सीजीआई स्क्रिप्ट को निष्पादित किया जाएगा और फिर यह एक HTML पृष्ठ का उत्पादन करेगा।

RFC 3875 "कॉमन गेटवे इंटरफेस (CGI)" C का उपयोग करके आंशिक रूप से CGI को परिभाषित करता है, जैसा कि पर्यावरण चर "C लाइब्रेरी रूटीन getenv () या वैरिएबल एनकाउंटर" द्वारा एक्सेस किया जाता है।

यदि आप C / C ++ का उपयोग करके CGI स्क्रिप्ट विकसित कर रहे हैं और ऐसा करने के लिए Microsoft Visual Studio का उपयोग करते हैं तो आप एक कंसोल प्रोग्राम विकसित करेंगे।


एक "सीजीआई स्क्रिप्ट" एक व्यापक शब्द है और इसमें निष्पादनयोग्य भी शामिल हो सकते हैं।
71GA

6

एक सीजीआई एक प्रोग्राम (या एक वेब एपीआई) है जिसे आप लिखते हैं, और इसे वेब सर्वर साइट पर सहेजते हैं। CGI एक फाइल है।

यह फ़ाइल वेब सर्वर पर बैठती है और प्रतीक्षा करती है। जब क्लाइंट ब्राउज़र आपकी CGI फ़ाइल को निष्पादित करने के लिए वेब सर्वर को एक अनुरोध भेजता है, तो वेब सर्वर सर्वर साइट पर आपकी CGI फाइल चलाता है। इस CGI प्रोग्राम के लिए इनपुट, यदि कोई हो, क्लाइंट ब्राउज़र से हैं। इस CGI प्रोग्राम के आउटपुट ब्राउज़र को भेजे जाते हैं।

CGI प्रोग्राम लिखने के लिए आप किस भाषा का उपयोग करते हैं? अन्य पदों में पहले से ही c, java, php, perl इत्यादि का उल्लेख है।


4

CGI के पीछे का विचार यह है कि एक प्रोग्राम / स्क्रिप्ट (चाहे पर्ल या यहां तक ​​कि C) के माध्यम से इनपुट प्राप्त होता है STDIN(अनुरोध डेटा) और डेटा के माध्यम से आउटपुट STDOUT(इको)printf स्टेटमेंट) के ।

अधिकांश PHP स्क्रिप्टों के योग्य न होने का कारण यह है कि वे PHP Apache मॉड्यूल के तहत चलाई जाती हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.