కామన్ గేట్వే ఇంటర్ఫేస్
కామన్ గేట్వే ఇంటర్ఫేస్ (CGI ) అనేది వెబ్ సర్వర్ సాఫ్ట్వేర్ ఏ విధంగా వెబ్ పేజీలని ఒక కన్సోల్ వినియోగానికి కేటాయించాలో నిర్వచించే ఒక ప్రమాణ నియమావళి.
ఇటువంటి ప్రయోగాలు "CGI స్క్రిప్ట్" అని పిలవబడుతున్నాయి - ఇవి సాధారణంగా ఒక స్క్రిప్టింగ్ భాషలో రాయబడుతాయి.
వెబ్ సర్వర్ యొక్క పని ఏమనగా సేవాగ్రాహితలు (సాధారణంగా వెబ్ బ్రౌజర్ లు) వెబ్ పేజీల కొరకు చేసే అభ్యర్ధనలకి స్పందించి, ఆ అభ్యర్ధనల సారాన్ని (ఎక్కువగా దానియొక్క URLలో ఉంటున్న) పరిశీలించి, పంపించడానికి ఏది సరైన పత్రమని నిర్దేశించి మరియు ఆ పత్రాన్ని సేవగ్రహితలకి పంపించడం.
అ అభ్యర్ధన డిస్క్ లో ఉన్న ఒక ఫైల్ ని సూచిస్తే, సెర్వర్ అ ఫైల్ యొక్క విషయాన్ని వెంటనే తిరిగి పంపివేయగలదు. మరొక పద్ధతి ఏమంటే, అ పత్రమొక్క విషయాన్ని అప్పడికప్పుడే రూపొందించవచ్చు. ఇలాగ చేయడానికి ఒక పద్ధతి ఏమంటే, కన్సోల్ ప్రయోగమే పత్రమొక్క విషయాన్ని నిర్ణయించి, అ కన్సోల్ ప్రయోగాన్ని వాడమని వెబ్ సెర్వర్ కు చెప్పడం. వెబ్ సెర్వర్, కన్సోల్ ప్రయోగాల మధ్య ఏ సమాచారము పరివర్తన చేయాలని మరియు ఏ విధంగా చేయాలని CGI నిర్దేశిస్తుంది.
వెబ్ సెర్వెర్ సాఫ్ట్ వేర్ కన్సోల్ ప్రయోగాన్ని ఒక ఆదేశం మేరకు వాడుతుంది. అభ్యర్ధన గురించిన సమాచారాన్ని (URL వంటి) ఏ విధముగా, ఆర్గ్యుమెంట్ లు మరియు ఎన్విరాన్మెంట్ చలరాశీలు రూపములో ఆదేశానికి పంపించాలని నిర్దేశిస్తుంది. బహిర్గత పత్రాన్ని ప్రమాణ బహిర్గతానికి ప్రయోగము రాయవలసి ఉంటుంది; బహిర్గతం గురించిన అదనపు సమాచారాన్ని (తిరిగి పంపించే పత్రమొక్క రకాన్ని తెలిపే MIME రకం వంటి), హెడర్కు ముందు జత చేశి తిరిగి పంపించే విషయాన్ని CGI నిర్దేశిస్తుంది.
1993లో వరల్డ్ వైడ్ వెబ్ (WWW) చిన్నదే కాని వేగంగా పెరుగుతూ ఉంది. WWW సాఫ్ట్ వేర్ రూపొందిచేవారు మరియు వెబ్ సైట్ రూపొందించేవారు www-టాక్ మెయిలింగ్ లిస్టు ద్వారా సంబంధాలు కొనసాగించారు. అప్పుడే కమాండ్ లైన్ ఎక్సేక్యుటబెల్ లని పిలవడానికి ఒక ప్రమాణాన్ని ఆమోదించారు. ఏ క్రింద చెప్పబడినవారి పేర్లని RFC 3875లో విశిష్టంగా పేర్కొన్నారు.
NCSA బృందం నియమాని రాశారు. NCSA ఇప్పటికి దాన్ని మాతృ స్థానములో నడిపిస్తూ ఉంది. ఇతర వెబ్ సర్వర్ ల రూపకర్తలు కూడా దాన్ని అమలు చేశారు. అప్పటినుండి ఇది వెబ్ సర్వర్ లకు ప్రమాణముగా ఉంటూ ఉంది.
ఒక వికీని అమలు పరచడం CGI ప్రోగ్రాంకు ఒక ఉదాహరణ. ప్రయోక్త యొక్క ప్రతినిధి ఒక అంశాన్ని కోరుకుంటుంది; సర్వర్ ఆ అంశము యొక్క పేజి మూలాన్ని (అది ఉంటె) బైటికి తీసి, దాన్ని HTMLగా మార్చి, ఫలితాన్ని పంపిస్తుంది.
వెబ్ సర్వర్ యొక్క దృష్టిలో, http://www.example.com/wiki.cgi వంటి కొన్ని లోకేటర్ లు CGI ద్వారా నిర్వహించవలసిన ఒక ప్రోగ్రాంని సూచిస్తుయి. అ URL కొరకు ఒక అభ్యర్ధన వచ్చినప్పుడు, దానికి సంబంధించిన ప్రోగ్రాం నిర్వహించబడుతుంది.
ప్రోగ్రాంకు ఎన్విరాన్మెంట్ చలరాశీలు ద్వారా సమాచారం పంపించబడుతుంది. ఇది కమాండ్-లైన్ ఆర్గ్యుమెంట్ లని వాడే సాధరాణ నిర్వాహణలకి బిన్నంగా ఉంది. HTTP PUT or POST ల విషయములో ప్రయోక్త సమర్పించిన సమాచారం ప్రమాణ ప్రవేశాంశం ద్వారా ప్రోగ్రాంకు అందించబడుతుంది.
వెబ్ సర్వర్ లు తరచుగా డైరక్టరి ట్రీ మూలములో ఒక cgi-bin డైరక్టరిని కలిగి ఉంటాయి.
ఫలితాన్ని ప్రమాణ బహిర్గతము రూపములో, ఒక హెడర్ మరియి ఖాళి పంక్తిని కలిపి వెబ్ సర్వర్ కు ప్రోగ్రాం తిరిగి పంపిస్తుంది.
ఒక HTTP హెడర్ మాదిరిగానే హెడర్ కోడింగ్ చేయబడుతుంది. తిరిగి పంపించబడుతున్న పత్రమొక్క MIME రకాన్ని కూడా విధిగా కలిపి ఉండాలి. హెడర్ లు ప్రయోక్తకు తిరిగి పంపించే ప్రతిస్పందనతో పాటు వెబ్ సర్వర్ సహాయముతో పంపించబడుతుంది.
ఒక వేళ CGI పిలుపు csh లేదా perl వంటి స్క్రిప్టింగ్ భాషని వాడి ఉంటె, కోడింగ్ తప్పిదాల వల్ల కోడ్ ఇంజెక్షన్ వల్నరబిలిటి ఏర్పడటానికి ఎక్కువ అవకాశం ఉంటుంది.
ఒక కమాండ్ ని పిలవడము సాధారణంగా ఒక కొత్తగా సృష్టించబడిన ప్రక్రియని ప్రారంబిస్తుంది. బహిర్గతాన్ని సృష్టించడం కంటే కూడా చాల ఎక్కువ సమయము మరియు మెమరి ప్రక్రియని ప్రారంబించడానికి అవసరము ఉంటుంది. ముఖ్యంగా ప్రోగ్రాం ఇంకా అనువదించవలసి లేదా కంపైల్ చేయవలసి ఉన్నప్పుడు ఈ పరిస్థ్తితి ఏర్పడుతుంది.
తరచు కమాండ్ పిలవబడుతూ ఉంటె, దానివల్ల ఏర్పడే పనిభారము వెబ్ సర్వర్ కు తొరలోనే ఆటంకం కలిగిస్తుంది.
అనువాదం వల్ల పెరిగే సమయం మరియు మెమరీ లని, Perl లేదా ఇతర స్క్రిప్టింగ్ భాషలు కాకుండ C/C++ లలో లాగ కంపైల్ చేయబడిన CGI ప్రోగ్రాంలని వాడటం వలన తగ్గించవచ్చు. ప్రక్రియ సృష్టి జరిగేటప్పుడు పెరిగే సమయం మరియు మెమరీ లని, FastCGI వంటి పరిష్కారాలని వాడటం ద్వారా కాని ప్రత్యేకమైన పొడిగింపు మాడ్యులలని వాడి వెబ్ సెర్వర్ లోపలే పూర్తిగా ప్రయోగం యొక్క కోడ్ ని నడపడం వల్ల కాని తగ్గించవచ్చు.
ఈ సమస్యల పరిష్కారాల కొరకు అనేక మార్గాలని పాటించవచ్చు:ఏ వెబ్ ప్రయోగము యొక్క సరైన అమరిక, ప్రయోగాల ప్రత్యేక వివరాలు, సంచారం మరియు వ్యవహారం యొక్క క్లిష్టత వంటి అంశాల మీద ఆధారపడి ఉంటుంది; ఈ లాభ నష్టాలని దృష్టిలో పెట్టుకుని, చేయవలసిన పని మరియు ఆ పని ఎంత సమయములో చేయాలో అనే విషయాలని బట్టి అ పని అమలు చేయడానికి ఒక ఉత్తమమైన పద్ధతిని నిర్ణయించాలి.