և Perl-ում CGI Սկրիպտներ Գրելու Ուղեցույց

Բովանդակություն


Ներածություն

Այս Ուղեցույցը նախատեսված է այն մարդկանց համար, որոնք ցանկանում են գրել իրենց WWW գործարկվող սկրիպտները՝ օգտագործելով WWW-ի Common Gateway Interface-ը ( CGI) (Ընդհանուր Ուղեմուտի Ինտերֆեյս): Չնայած հիմնական շեշտը դրված է REXX-ի վրա, Perl-ով շատ օրինակներ նույնպես տրված են:

Կան մի շարք պարզ օգտագործվող, ծրագրային գրադարաններ, որոնց նպատակն է հեշտացնել CGI սկրիպտներ գրելու աշխատանքը: cgi-lib.rxx-ը գործառույթների REXX գրադարան է, (հասանելի է SLAC-ում՝ օգտագործելով REXX
CALL PUTENV <<REXXPATH=/afs/slac/www/slac/www/tool/cgi-rexx>> հայտարարությունը, որպեսզի գործարկման ժամանակ ներառվի գրադարանը)և cgi-lib.pl-ն նմանատիպ գրադարան է  Perl-ում՝ Սթիվ Բրենների կողմից գրված (այս գրադարանի գործարկվող պատճենը կա SLAC-ում՝ /afs/slac/g/www/cgi-lib/cgi-lib.pl-ում): NCSA-ն ունի Perl CGI ենթածրագրերի շատ օգտակար խումբ, որը հասանելի է անանուն FTP-ի միջոցով: Բրիջիթ Ջելլինեքի կողմից գրված Perl CGI Սերվերի Սկրիպտների մեկ այլ խումբ հասանելի է՝ համաձայն Gnu public license-ի (Ընդհանուր հասարակական լիցենզիա): www.stanford.edu սկրիպտների և ծրագրերի համար Աղբյուր կոդ կա նաև: Էրլ Հուդի կողմից հավաքված Perl WWW ծրագրերի ցանկ նույնպես կա: Վերջում նայեք Վեբ Ծրագրավորման Կենտրոնը:

Քանի որ WWW սերվերում գործարկող օգտագործողի սկրիպտների հետ կապված անվտանգության և այլ ռիսկեր կան, կարդացողը կարող է ցանկանալ սկզբում նայել օգտագործողների CGI սկրիպտների համար SLAC Security Wrapper-ի մասին տեղեկատվություն պարունակող փաստաթուղթը: Բացի անվտանգությունը բարելավելուց այս ծրագիրը նաև պարզեցնում է սկսնակի համար CGI սկրիպտ գրելու ընթացքը:

Սկրիպտ գրել սկսելուց առաջ նաև կարող է ցանկանաք ստուգել CGI Սկրիպտներով Ապահովված SLAC Վեբ Օժանդակ Ծրագրերի մասին մի քանի նախնական գրություններ:

CGI_ին արտաքին ծրագրեր կամ ուղեմուտներ աշխատեցնող ինտերֆեյս է տեղեկատվական սերվերի ներքո: Ներկայումս ապահովվող տեղեկատվական սերվերները HTTP (WWW-ի կողմից օգտագործվող հիպերտեքստի փոխանցման պրոտոկոլը) սերվերներն են:

Gateway ծրագրերը գործարկվող ծրագրեր են (օրինակ՝ UNIX սկրիպտներ), որոնք կարող են իրենք իրենցով աշխատել (սակայն չէիք ցանկանա բացառել վրիպազերծման նպատակների համար): Դրանք գործարկվող են ստեղծվել, որպեսզի կարողանան միմյանց փոխարեն աշխատել բազմաթիվ (հնարավորինս շատ տարբեր) տեղեկատվական սերվերների ներքո: Այս հատկորոշմանը համապատասխանող Gateway ծրագրերը կարելի է գրել ցանկացած լեզվով՝ ներառյալ REXX կամ Perl, որը ստեղծում է գործարկվող ֆայլ

Սկրիպտում Ներածման Ստացում

Ներածումը կարող է ուղարկվել սկրիպտին մի քանի ձևով՝ կախված համակարգչի Uniform Resource Locator-ից (URL) (Աշխատամիջոցների Համընդհանուր Տեղորոշիչ) կամ HyperText Markup Language (HTML) (Հիպերտեքստի Նշագրման Լեզու) Ֆորմից՝

  • QUERY_STRING Միջավայրի Փոփոխական

    QUERY_STRING-ը սահմանվում է որպես URL-ում առաջին ?-ին հաջորդող ցանկացած բան, որն օգտագործվել է Ձեր ուղեմուտ մուտք գործելու նպատակով: Այս տեղեկատվությունը կարելի է ավելացնել HTML ISINDEX փաստաթղթով կամ HTML Ֆորմով ( GET գործողությամբ): Այն կարելի էր նաև ձեռքով ներդնել HTML հիպերտեքստի հղումում կամ խարիսխում, որը նշում է Ձեր ուղեմուտը: Այս շարքը սովորաբար տեղեկատվական հարցում կլինի, օրինակ՝ ի՞նչ է օգտագործողը ցանկանում փնտրել տվյալների բազաներում, կամ հավանաբար Ձեր հետադարձ կապի Ֆորմի կոդավորված արդյունքները: Կարելի է REXX մուտք գործել՝ օգտագործելով String=GETENV('QUERY_STRING')
    կամ Perl՝ օգտագործելով $string=$ENV('QUERY_STRING');

    Այս շարքը կոդավորվում է ստանդարտ URL ձևաչափով, որը բացատները փոխում է +-ի, իսկ կոդավորող հատուկ գրանշանները՝ %xx տասնվեց կոդավորմամբ: Օգտագործելու համար այն պետք է ապակոդավորեք: Կարող եք վերանայել cgi-lib.rxx REXX ԸՆԹԱՑԱԿԱՐԳԸ DeWeb-ով կամ Perl կոդ հատվածը, որն օրինակներ է բերում, թե ինչպես ապակոդավորել հատուկ գրանշանները:

    Եթե Ձեր սերվերը Ֆորմից չի ապակոդավորում արդյունքները, նաև կստանաք Ձեզ համար ապակոդավորված հարցման շարքը հրամանների տողում: Սա նշանակում է, որ հարցման շարքը հասանելի կլինի REXX-ում PARSE ARG հրամանի միջոցով կամ Perl $ARGV[n]-կազմում:

    Օրինակ՝ եթե ունեք URL http://www.slac.stanford.edu/cgi-bin/foo?hello+world և օգտագործում եք REXX հրաման PARSE ARG Arg1 Arg2, ապա Arg1 կպարունակի <<hello>>, և Arg2 կպարունակի <<world>> (այն է՝ + նշանը փոխարինվում է բացատով): 
    Perl-ում $ARGV[1] պարունակում է <<hello>>, և $ARGV[2] պարունակում է <<world>>: Եթե ընտրում եք հրամանների տողը օգտագործել՝ ներածման մուտք ունենալու համար, պետք է տվյալները քիչ մշակեք՝ նախքան օգտագործելը:

     

  • PATH_INFO Միջավայրի Փոփոխական

    Շատ ժամանակ կցանկանաք տվյալներ ուղարկել Ձեր ուղեմուտներ, որոնց համակարգիչը չպետք է խառնվի: Այդպիսի տեղեկատվությունը կարող է այն Ֆորմի անունը լինել, որը ստեղծել է նրանց կողմից ուղարկվող արդյունքները:

    CGI թույլ է տալիս, որ լրացուցիչ տեղեկատվությունը տեղադրվի URL-ում Ձեր ուղեմուտի համար, որը կարելի է օգտագործել՝ լրացուցիչ կոնտեքստ-հատուկ տեղեկատվությունը սկրիպտների փոխանցելու համար: Այս տեղեկատվությունը սովորաբար հասանելի են դարձնում՝ որպես <<լրացուցիչ>> տեղեկատվություն URL-ում Ձեր ուղեմուտից հետո: Ամեն դեպքում այս տեղեկատվությունը չի կոդավորվում սերվերի կողմից: This information is not encoded by the server in any way. Կարելի է REXX մուտք անել՝ օգտագործելով String=GETENV('PATH_INFO'), կամ Perl՝ օգտագործելով $string=$ENV('PATH_INFO');

    Սա ցուցադրելու համար եկեք ասենք, որ ես ունեմ CGI սկրիպտ, որը հասանելի է իմ սերվերին foo անվամբ: Երբ foo-ի մուտք ունեմ կոնկրետ փաստաթղթից, ցանկանում եմ տեղեկացնել foo-ին, որ տվյալ պահին անգլերենի տեղեկատուում եմ, ոչ թե Pig Latin-ի: Այս դեպքում կարող եմ իմ սկրիպտը մուտք անել HTML փաստաթղթում՝ որպես

    <A HREF="http://www/cgi-bin/foo/language=english">foo</A>

    Երբ սերվերը գործարկում է foo-ն, այն ինձ կտա /language=english-ի PATH_INFO, և իմ ծրագիրը կարող է ապակոդավորել այն և գործել համապատասխանաբար: 

    PATH_INFO-ն և QUERY_STRING-ը կարող են համակցվել: Օրինակ՝ URL՝
    http://www/cgi-bin/htimage/usr/www/img/map?404,451
    միջոցով սերվերը կաշխատեցնի htimage անվանվող սկրիպտը: <</usr/www/img/map>> մնացած տեղեկատվությունը htimage կփոխանցվի PATH_INFO միջավայրի փոփոխականում, իսկ <<405,451>>-ը կփոխանցվի QUERY_STRING փոփոխականում: Այս դեպքում htimage-ը սկրիպտ է՝ CERN HTTPD-ով ապահովվող ակտիվ քարտեզներ կիրառելու համար:

     

  • Ստանդարտ Ներածում

    Եթե Ձեր Ֆորմն ունի ՄԵԹՈԴ=<<POST>> իր ՖՈՐՄ պիտակում, Ձեր CGI ծրագիրը կստանա կոդավորված Ֆորմ ներածումը ստանդարտ ներածմամբ (stdin Unix-ում): Սերվերը Ձեզ ՉԻ ուղարկի EOF տվյալների վերջում, փոխարենը դուք պետք է օգտագործեք միջավայրի փոփոխական CONTENT_LENGTH՝ որոշելու, թե որքան տվյալներ պետք է կարդաք stdin-ից: Սա կարող եք ավարտել REXX-ում՝ օգտագործելով In=CHARIN(,1,GETENV('CONTENT_LENGTH')), կամ Perl-ում՝ օգտագործելով read(STDIN,$in,$ENV{'CONTENT_LENGTH'});

    Եթե ցանկանում եք ստանդարտ ներածումը փոխանցել մեկ այլ սկրիպտի, որը ավելի ուշ կայցելեք, ուրեմն կարող է ցանկանաք վերանայել cgi-lib.rxx REXX ԸՆԹԱՑԱԿԱՐԳ ReadPost:

Կարող եք վերանայել REXX Կոդ Հատվածը, որն օրինակ է բերում, թե ինչպես կարդալ ներածման զանազան ձևերը  Ձեր սկրիպտում:

REXX ԸՆԹԱՑԱԿԱՐԳեր ReadForm  MethGet և MethPost-ի հետ միասին, որոնք բոլորը հասանելի են cgi-lib.rxx-ում, հնարավոր է օգտագործել՝ Ֆորմից ներածումը կարդալու գործընթացը հեշտացնելու համար:

Ֆորմերի Ներածման Ապակոդավորում

Երբ Ֆորմ եք գրում, ներածման տարրերից յուրաքանչյուրն ունի անվան պիտակ: Երբ օգտագործողը տեղադրում է այս տարրերի տվյալները Ֆորմի մեջ, այդ տեղեկատվությունը կոդավորվում է Ֆորմի տվյալներում: Ներածման տարրերից յուրաքանչյուրին օգտագործողի կողմից տրված արժեքը կոչվում է արժեք:

Ֆորմի տվյալներն ամպերսենդ (&) գրանշանով բաժանված անուն=արժեք զույգերի հոսք են: Յուրաքանչյուր անուն=արժեք զույգը URL կոդավորված է, այն է՝ բացատները փոխվում են գումարման նշանով, իսկ մի քանի գրանշանները կոդավորվում են տասնվեցական տեսքով: Ֆորմի տվյալներն ապակոդավորելու համար նախ պետք է վերլուծեք Ֆորմի տվյալների բլոկը առանձին անուն=արժեք զույգերի՝ դուրս գցելով ամպերսենդները: Հետո պետք է վերլուծեք յուրաքանչյուր անուն=արժեք զույգն առանձին անվան և արժեքի: Օգտագործեք հանդիպած առաջին հավասարման նշանը տվյալները բաժանելու համար: Եթե մեկից ավելի կա, ապա տվյալների հետ կապված սխալ կա: Կրկին դուրս գցեք հավասարման նշանները: Վերջապես չեղարկեք յուրաքանչյուր անվան և արժեքի URL կոդավորումը: 

Կարող եք վերանայել REXX կամ Perl կոդ հատվածը, որը Ֆորմի ներածման ապակոդավորման օրինակներ է բերում:

Անուն և արժեք տեղեկատվությունը սկրիպտում օգտագործելիս անհրաժեշտ է տեղեկացված լինեք, որ 

  • ոչ մի բան չի թելադրում այն կարգը, ըստ որի անուն=արժեք-ը  միավորված կլինի,
  • ֆորմում նշված ոչ բոլոր անունները և արժեքներն են անհրաժեշտ, որ ուղարկվեն համակարգչի կողմից, օրինակ՝ եթե ոչինչ չի ընտրվում ոլորվող ցանկում, ապա ոչ անունը, ոչ էլ արժեքը չի ուղարկվի,
  • մեկից ավելի արժեք կարող է ուղարկվել տվյալ անվան համար, օրինակ՝ եթե ոլորվող ցանկը թույլ է տալիս մի քանի տարբերակների ընտրությունը:

Փաստաթուղթը Հետ Ուղարկել Համակարգչին

CGI ծրագրերը կարող են վերադարձնել փաստաթղթերի բազմաթիվ տեսակներ: Նրանք կարող են համակարգչին հետ ուղարկել պատկեր, HTML փաստաթուղթ, չկոդավորված փաստաթուղթ, Postscript փաստաթղթեր կամ հավանաբար նույնիսկ Ձեր մարմնի գործառույթների աուդիո տեսահոլովակ: Նրանք նաև կարող են վերադարձնել այլ փաստաթղթերին ուղղված հղումներ (տարածք խնայելու համար մենք կանտեսենք այս երկրորդ դեպքն այստեղ, հավելյալ տեղեկատվություն կարելի է գտնել NCSA-ի CGI Primer-ում): Համակարգիչը պետք է իմանա, թե ինչ տեսակի փաստաթուղթ եք ուղարկում, որպեսզի այն կարողանա այն համապատասխանաբար ներկայացնել: Որպեսզի համակարգիչը սա իմանա, Ձեր CGI ծրագիրը պետք է ասի սերվերին, թե ինչ տեսակի փաստաթուղթ է վերադարձնում:

Ձեր կողմից հետ ուղարկվող փաստաթղթի տեսակը սերվերին ասելու համար CGI-ին ձեզանից պահանջում է Ձեր արտածմանը կարճ էջագլուխ դնել: Այս էջագլուխն իրենից ներկայացնում է ASCII տեքստ, որը բաղկացած է տողերից, որոնք էլ բաժանված են կամ linefeeds-ով (նոր տող) կամ linefeeds-ով հաջորդող carriage returns-ով (պարբերություն): Ձեր սկրիպտը պետք է արտածի առնվազն երկու այսպիսի տողեր, նախքան դրա տեղեկատվությունն անմիջապես համակարգչին հետ կուղարկվի: Այս տողերն օգտագործվում են՝ հետևյալ փաստաթղթի MIME տեսակը նշելու համար 

WWW-ին առնչվող մի քանի ընդհանուր MIME տեսակներն են՝ 

  • <<տեքստ>> Պարունակություն-Տեսակ, որն օգտագործվում է՝ տեքստային տեղեկատվությունը մի շարք գրանշային խմբով և ձևաչափված տեքստի նկարագրման լեզուները ստանդարտացված ձևով ներկայացնելու համար: Երկու ամենից հավանական ենթատեսակներն են՝ 
    • text/plain՝ առանց հատուկ ձևաչափման պահանջների տեքստ:
    • text/html՝ ներդրված HTML հրամաններով տեքստ
  • <<ծրագիր>> Պարունակություն- Տեսակ, որն օգտագործվում է ծրագրի տվյալները կամ երկուական համակարգի տվյալները փոխանցելու համար: Հաճախակի օգտագործվող երկու ենթատեսակներն են՝
    • application/postscript: Տվյալները PostScript-ում են և պետք է հանձնվեն PostScript մեկնաբանիչին:
    • application/binary: տվյալներն ինչ-որ անհայտ երկուական ձևաչափում են, օրինակ՝ ֆայլի տեղափոխման արդյունքները:
  • <<պատկեր>> Պարունակություն-Տեսակ՝ պատկերի (նկար) տվյալները փոխանցելու համար: Շատ հավանական ենթատեսակներ կան, սակայն WWW -ում ամենից հաճախ օգտագործվողներն են՝
    • image/gif: GIF ձևաչափով պատկեր:
    • image/xbm: X Bitmap ձևաչափով պատկեր:
    • image/jpeg: JPEG ձևաչափով պատկեր: 

     

Սերվերին Ձեր արտածման պարունակության տեսակն ասելու համար Ձեր արտածման առաջին տողը պետք է կարդա՝
Պարունակություն-տեսակ: տեսակ/ենթատեսակ 
որտեղ տեսակ/ենթատեսակը MIME տեսակը և ենթատեսակն է Ձեր արտածման համար: 

Հետո պետք է ուղարկեք երկրորդ տողը: Ներկայիս սպեցիֆիկացիայով ԵՐԿՐՈՐԴ ՏՈՂԸ ՊԵՏՔ Է ԴԱՏԱՐԿ ԼԻՆԻ: Սա նշանակում է, որ այն իր վրա ոչինչ չպետք է ունենա՝ բացի նոր տողից: Հենց սերվերն առբերում է այս տողը, այն գիտի, որ դուք վերջացրել եք Ձեր արտածման մասին սերվերին տեղեկացնելը, և այժմ կսկսի իրական արտածումը: Եթե բաց թողնեք այս տողը, սերվերը կփորձի վերլուծել Ձեր արտածումը՝ փորձելով գտնել Ձեր հարցման վերաբերյալ հավելյալ տեղեկատվություն,  և դուք շատ երջանիկ կդառնաք:

Կարող եք վերանայել REXX Կոդ Հատվածը, որը Պարունակություն-տեսակ տեղեկատվության հետ գործ ունենալու վերաբերյալ օրինակ է բերում:

Երբ այս երկու տողերի արտածումն ավարտվում է, stdout-ին ուղղված ցանկացած արտածում (օրինակ՝ REXX SAY հրաման) կներառվի համակարգչին ուղարկված փաստաթղթում: Այս արտածումը պետք է համատեղելի լինի Պարունակություն-տեսակ էջագլխի հետ: Օրինակ՝ եթե էջագլուխը նշել է Պարունակություն-տեսակ text/html, ապա հետևյալ արտածումը պետք է ներառի HTML ձևաչափումը, օրինակ՝ <BR> կամ <P>-ի օգտագործումը՝ նոր տողեր սկսելու համար, կամ <PRE>-ի օգտագործումը՝ HTML-ի ավտոմատ ձևաչափումը հեռացնելու համար:

Դիագնոստիկա և Սխալների Հայտնում

Երբ stdout-ն ներառվում է դիագնոստիկա ուղարկված փաստաթղթում, SAY հրամանով արտածված դիագնոստիկան կհայտնվի փաստաթղթում: Կարող եք վերանայել REXX Կոդ Հատվածը, որը դիագնոստիկ զեկուցման օրինակ է պարունակում:

Եթե սխալներ են հանդիպում (օրինակ՝ ներածում չի արվել, անվավեր գրանշաններ են գտնվել, չափից շատ փաստարկներ են նշվել, անվավեր հրամանը կատարելու պահանջ կա, անվավեր շարահյուսություն կամ անորոշ փոփոխական է հանդիպել REXX սկրիպտում), սկրիպտը պետք է տա մանրամասն տեղեկատվություն այն մասին, թե ինչն է սխալ  և այլն: Շատ օգտակար կարող է լինել տեղադրված բազմաթիվ WWW Միջավայրի Փոփոխականների կարգավորումների վերաբերյալ տեղեկատվության տրամադրումը:

cgi-lib.rxx-ում CGIerror, CGIdie և MyURL REXX ԸՆԹԱՑԱԿԱՐԳերը որոշ չափով օգնում են սխալի հաղորդման գործում: Հավելյալ տեղեկատվության համար վերանայեք REXX կոդ հատվածները, որոնք օգտագործում են CGIerror և  CGIdie, ինչպես նաև սովորական CGIerror արտածում և CGIdie արտածում:

Երկու Պարզ REXX WWW CGI Սկրիպտներ

Որպեսզի Ձեր Վեբ սերվերը գործարկի CGI սկրիպտ, դուք պետք է

  • գրեք սկրիպտը: Սա պարզեցնելու համար կարող է ցանկանաք օգտնվել  գործառույթների cgi-lib.rxx գրադարանից՝ ներառյալ այս էջում նախապես ներկայացված մի քանիսը: Երկու պարզ, բայց ամբողջական օրինակներ կարող են օգնել՝
    1. սկրիպտի աղբյուրը՝ UNIX finger գործառույթը աշխատեցնելու համար:  
    2. նվազագույն HTTP Ֆորմի և Սկրիպտի աղբյուրը:
  • Ձեր Վեբ սերվերով սկրիպտը գործարկվող դարձրեք: SLAC-ում Unix-ով սա իրականացվում է՝ chmod հրամանն օգտագործելով, օրինակ՝ 
    • chmod o+x http://www-slac.slac.stanford.edu/cottrell/bin/cgi1.rxx
      chmod u+x http://www-slac.slac.stanford.edu/cottrell/bin/cgi1.rxx
  • Ձեռք բերեք Ձեր Վեբ-Մաստերը, որպեսզի Վեբ սերվերի կանոնների ֆայլին կանոն ավելացնեք, որն էլ  թույլ կտա Վեբ սերվերին Ձեր սկրիպտը գործարկել: W3C սերվերի կանոնների ֆայլի վերաբերյալ հավելյալ տեղեկատվություն կարելի է գտնել, եթե նայեք  W3C httpd-ի Կազմաձևման Ֆայլը, ինչպես նաև կանոնների ֆայլում կիրառվող մի քանի արտապատկերման ցուցումների պարզ օրինակը:

Վեբ-Մաստերը կցանկանա երաշխավորել, որ Ձեր սկրիպտի Անվտանգության Ասպեկտներին անդրադարձ եղել է նախքան Ձեր սկրիպտը Կանոնների ֆայլ ավելացնելը:

Հետաքրքրող Այլ Աղբյուրներ

  • Թղթային Պատճեն՝
    • HTML & CGI Unleashed  գիրքը շատ օգտակար տեղեկատվություն է պարունակում C, Perl և REXX-ում CGI սկրիպտներ գրելու վերաբերյալ: 
    • Steve Brenner & Edwin Aoki-ի կողմից գրված Introduction to CGI/PERL գիրքը Perl-ում CGI սկրիպտներ գրելու վերաբերյալ օգտակար նախաբան է:
  • Writing World-Wide Web CGI Scripts in REXX՝  ներկայացված 1996թ-ի գարնանը SHARE Տեխնիկական Կոնֆերանսի ժամանակ,  1996թ. մարտի 7, Անահայմ Կալիֆորնիա:
  • The NetRexx Language Page-ը տեղեկատվություն է տալիս Մայք Քաուլիշոյի (REXX-ի հեղինակ)՝ Java-ի համար Rexx front end ստեղծմանն ուղղված փորձնական նախագծի վերաբերյալ:
  • Նաև այցելեք լրախումբ comp.infosystems.www.authoring.cgi-ը, որը Ընդհանուր Ուղեմուտի Ինտերֆեյսի (ԸՈՒԻ) սկրիպտների զարգացման վերաբերյալ քննարկումներ է ներառում, քանի որ դրանք վերաբերում են Վեբ էջի հեղինակմանը: Հավանական թեմաները ներառում են քննարկումներ այն մասին, թե ինչպես ֆորմերի արդյունքների հետ վարվել, ինչպես ստեղծել պատկերներ ծրագրի աշխատանքի ընթացքում և ինչպես միացնել այլ ինտերակտիվ Վեբ առաջարկները:
  • World Wide Web-ը (Հաճախակի Տրվող Հարցեր, Պատասխաններով) World Wide Web-ի մասին ընդհանուր շատ-շատ հարցերի պատասխան է տալիս:
  • Եթե օգտագործում եք Perl և ունեք Perl-ի վերաբերյալ սովորական հարց, որն իսկապես CGI-բնորոշ հարց չէ, ստուգեք Perl ՀՏՀ-ը:
  • Եթե Windows NT-ի համար սկրիպտներ գրելիս կլինեք, ապա նայեք Somarsoft — Windows NT Անվտանգության Հարցերը

Acknowledgements

Much of the text on the Common Gateway Interface and Forms comes from NCSA documents. Useful information and text was also obtained from The World-Wide Web: How Servers Work, by Mark Handley and John Crowcroft, published in ConneXions, February 1995.

source: http://www-slac.slac.stanford.edu/slac/www/resource/how-to-use/cgi-rexx/cgi.html