CGI - Ընդհանուր դարպասի միջերեսարտաքին կիրառական ծրագրի ինտերֆեյսի (հաղորդակցության) ստանդարտ է այնպիսի տեղեկատվական սերվերի հետ, ինչպիսին է HTTP, վեբ սերվերը:

Սովորաբար, WWW սերվերներից վերցված հիպերտեքստային փաստաթղթերը պարունակում են ստատիկ տվյալներ: CGI-ով դուք կարող եք ստեղծել CGI ծրագրեր, որոնք կոչվում են դարպասներ, որոնք այնպիսի կիրառական համակարգերի հետ փոխազդեցության դեպքում, ինչպիսիք են տվյալների բազայի կառավարման համակարգը, աղյուսակը, բիզնես գրաֆիկան և այլն, կկարողանան դինամիկ տեղեկատվություն ցուցադրել օգտատիրոջ էկրանին։

Gateway ծրագիրը գործարկվում է WWW սերվերի կողմից իրական ժամանակում: WWW սերվերը ապահովում է, որ օգտագործողի հարցումը փոխանցվի gateway-ին, որն իր հերթին օգտագործելով հավելվածի համակարգի միջոցները վերադարձնում է հարցումի մշակման արդյունքը օգտագործողի էկրանին։ Gateway ծրագիրը կարող է կոդավորվել C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script-ով: Որպես գործարկվող մոդուլ՝ այն գրված է WWW սերվերի cgi-bin կոչվող ենթացանցում։

Տվյալների փոխանցում դեպի դարպասներ

Տեղեկատվության հարցման վերաբերյալ տվյալները սերվերից դարպաս փոխանցելու համար սերվերն օգտագործում է հրամանի տողը և շրջակա միջավայրի փոփոխականները: Այս միջավայրի փոփոխականները սահմանվում են, երբ սերվերը կատարում է gateway ծրագիրը:

Տարբեր մեթոդների հարցումներ

Տեղեկատվությունը փոխանցվում է դարպասներին հետևյալ ձևով.

անուն=արժեք&անուն1=արժեք1&..

որտեղ անունը փոփոխականի անունն է, իսկ արժեքը՝ իրական արժեքը: Կախված հարցումը կատարելու համար օգտագործվող մեթոդից, այս տողը հայտնվում է կամ որպես URL-ի մաս (GET մեթոդի դեպքում) կամ որպես HTTP հարցման բովանդակություն (POST մեթոդով): Վերջին դեպքում այս տեղեկատվությունը կուղարկվի դարպաս՝ ստանդարտ մուտքագրման միջոցով:

CONTENT_LENGTH բայթ ուղարկվում է ստանդարտ մուտքային ֆայլի նկարագրիչին: Սերվերը նաև ուղարկում է CONTENT_TYPE (փոխանցված տվյալների տեսակը) դեպի դարպաս: Սերվերից չի պահանջվում ֆայլի վերջի նիշ ուղարկել CONTENT_LENGTH տվյալների բայթ ուղարկելուց և դարպասի կողմից դրանք կարդալուց հետո:

Օրինակ

Որպես օրինակ վերցնենք POST մեթոդով (METHOD=POST) ձևի արդյունքը։ Թող լինի 7 բայթ կոդավորված այսպես.

Այս դեպքում սերվերը CONTENT_LENGTH-ը կսահմանի 7, իսկ CONTENT_TYPE-ը՝ application/x-www-form-urlencoded: Դարպասի ստանդարտ մուտքագրման առաջին նիշը կլինի «a», որին հաջորդում է կոդավորված տողի մնացորդը:

Հրամանի տողի փաստարկներ

Հրամանի տողում գտնվող դարպասը սերվերից ստանում է.

URL-ի մնացած մասը դարպասի անունից հետո՝ որպես առաջին պարամետր (առաջին պարամետրը դատարկ կլինի, եթե առկա է միայն դարպասի անունը), և
- հիմնաբառերի ցանկը որպես որոնման սցենարի հրամանի տողի մնացորդ, կամ
- դաշտերի անունների փոխարինում` ավելացված հավասար նշանով (զույգ դիրքերում) և համապատասխան փոփոխական արժեքներով (կենտ դիրքերում):

Հիմնաբառերը, ձևի դաշտերի անունները և արժեքները փոխանցվում են վերծանված (HTTP URL կոդավորման ձևաչափից) և վերակոդավորվում են Bourne shell-ի կոդավորման կանոնների համաձայն, այնպես որ հրամանի տողում գտնվող դարպասը կստանա տեղեկատվությունն այնպես, ինչպես կա, առանց: լրացուցիչ փոխարկումների անհրաժեշտությունը:

Վեբ դիզայնի տեխնոլոգիա CGI (անգլերեն Common Gateway Interface-ի հապավումը) - մեր բառապաշարում սա ՈՉ լեզու է, ինչպես շատերը սխալմամբ կարծում են, այլ սերվերի տեխնոլոգիա (այսպես կոչված «gateway, կամ gateway ինտերֆեյս)»): Իրոք, գործնականում դրա իրականացման համար պահանջվում է ծրագրավորման լեզուներից մեկը, բայց մենք այս մասին կխոսենք մի փոքր ավելի ցածր:

CGI-ի էությունը հետևյալն է՝ օգտագործվում է տեղեկատվության (տվյալների) հսկողությունը մի օբյեկտից մյուսը փոխանցելու սկզբունքը։ Պարզության համար, որպես օրինակ, դիտարկենք տարբերակներից ամենապարզը. «սերվեր-հաճախորդ» զույգում օգտագործողին խնդրում են լրացնել որոշակի ձև (ինչ ձևեր են, տես); օգտվողը լրացնում է այն, այնուհետև սեղմում է «Ներկայացնել» մակագրությամբ կոճակը (կամ այլ մակագրությամբ, բայց մեզ ոչ թե մակագրությունն է հետաքրքրում, այլ այս կոճակի իմաստը, այսինքն՝ նրա գործառույթը): Գործառույթն է կանչել (ակտիվացնել) սկրիպտը, որը ծառայում է CGI-ին և փոխանցել հսկողությունը այն տվյալների վրա, որոնք օգտագործողը մուտքագրել է ձևի մեջ:

Անհասկանա՞

Այսինքն՝ պատկերացրեք, որ վեբ էջում կա ձև։ Դուք լրացրեցիք այն: Ձևը լրացնելիս, դրա բովանդակությունը փոխելիս և այլն, ձևի բովանդակությունը կառավարվում է ձեր համակարգչի ծրագրային ապահովման միջոցով (ավելի ճիշտ՝ դիտարկիչ): Բայց երբ սեղմում եք «Ներկայացնել» կոճակը, տեղի է ունենում որոշակի փոփոխություն (սա էջի թարմացում է). լրացված ձևի տվյալները ուղարկվում են սերվեր՝ CGI սկրիպտի տրամադրության տակ:

Իրականում, սերվերն ինքը «թքած ունի», թե կոնկրետ ինչ եք փորձում նրան ուղարկել։ Բայց CGI սկրիպտը, որը կոչվում է (ասում են «ակտիվացված») կոճակ սեղմելով, սպասում և ստանում է հենց այս տեղեկատվությունը, և կոճակը սեղմելու պահից ուղարկված տվյալների հետ ոչինչ չես կարող անել. CGI-ն փոխանցել է. վերահսկողություն դրա վրա։

Փոստային ձևը կայքում

Գնային փաթեթավորում դեղերի կազմակերպիչների համար դեղերի առցանց խանութում ցածր գնով.

Վեբ դիզայնի մեջ այս տեխնոլոգիան շատ լայնորեն կիրառվում է։ Արդեն հինգ-յոթ տարի առաջ անհնար էր պատկերացնել պատշաճ կայք, որը չունենա փոստային ձևաթղթեր: Բայց ձեւաթղթերի օգնությամբ կատարվում են լայնածավալ բազմաէջ հարցումներ, եւ այլն, եւ այլն...

Տվյալների մշակում

Տնական սագի գինը մեկ կգ-ի համար գնել թարմ տնական միս առցանց խանութում:

Ցանցից ստացված տվյալները մշակելու համար օգտագործվում է սերվերի վրա կատարված սկրիպտը: Մենք չենք խորանա կոնկրետ սերվերի ծրագրավորման մեջ, միայն կասենք, որ ամենից հաճախ նման սկրիպտները կատարվում են PERL-ով (Practical Extraction and Report Language, ֆայլերն ունեն .pi ընդլայնում) կամ C (.cgi ընդլայնում):

Ի տարբերություն նախորդ հոդվածում քննարկված JavaScript տեխնոլոգիայի, CGI տեխնիկան ունի անհերքելի առավելություն. քանի որ տեղեկատվության ամբողջ մշակումն իրականացվում է սերվերի վրա, կայքի գործունեությունը ոչ մի կերպ կախված չէ հաճախորդի սարքավորումներից (օգտագործողը կարող է ունենալ ցանկացած բրաուզեր, գլխավորն այն է, որ դա ճիշտ լինի):

CGI տեխնոլոգիա - Common Gateway Interface

CGI - Ընդհանուր դարպասի միջերեսարտաքին կիրառական ծրագրի ինտերֆեյսի (հաղորդակցության) ստանդարտ է այնպիսի տեղեկատվական սերվերի հետ, ինչպիսին է HTTP, վեբ սերվերը: Սովորաբար, WWW սերվերներից վերցված հիպերտեքստային փաստաթղթերը պարունակում են ստատիկ տվյալներ: CGI-ով դուք կարող եք ստեղծել CGI ծրագրեր, որոնք կոչվում են դարպասներ , որոնք այնպիսի կիրառական համակարգերի հետ փոխազդեցության դեպքում, ինչպիսիք են տվյալների բազայի կառավարման համակարգը, աղյուսակը, բիզնես գրաֆիկան և այլն, կկարողանան դինամիկ տեղեկատվություն ցուցադրել օգտատիրոջ էկրանին։

Gateway ծրագիրը գործարկվում է WWW սերվերի կողմից իրական ժամանակում: WWW սերվերը ապահովում է, որ օգտագործողի հարցումը փոխանցվի gateway-ին, որն իր հերթին օգտագործելով հավելվածի համակարգի միջոցները վերադարձնում է հարցումի մշակման արդյունքը օգտագործողի էկրանին։ Gateway ծրագիրը կարող է կոդավորվել C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script-ով: Որպես գործարկվող մոդուլ՝ այն գրված է WWW սերվերի cgi-bin կոչվող ենթացանցում։

Տվյալների փոխանցում դեպի դարպասներ

Տեղեկատվության հարցման վերաբերյալ տվյալները սերվերից դարպաս փոխանցելու համար սերվերն օգտագործում է հրամանի տողը և շրջակա միջավայրի փոփոխականները: Այս միջավայրի փոփոխականները սահմանվում են, երբ սերվերը կատարում է gateway ծրագիրը:

Տարբեր մեթոդների հարցումներ

Տեղեկատվությունը փոխանցվում է դարպասներին հետևյալ ձևով.

անուն=արժեք&անուն1=արժեք1&...,

որտեղ անունը փոփոխականի անունն է (հայտարարությունից ՁԵՎ, օրինակ), իսկ արժեքը նրա իրական արժեքն է։ Կախված հարցման համար օգտագործվող մեթոդից, այս տողը հայտնվում է որպես URL-ի մաս (մեթոդի դեպքում ՍՏԱՆԱԼ), կամ որպես բովանդակություն HTTPհարցում (մեթոդ ՓՈՍՏ) Վերջին դեպքում այս տեղեկատվությունը կուղարկվի դարպաս՝ ստանդարտ մուտքագրման միջոցով:

CONTENT_LENGTH բայթ ուղարկվում է ստանդարտ մուտքային ֆայլի նկարագրիչին: Սերվերը նաև ուղարկում է CONTENT_TYPE (փոխանցված տվյալների տեսակը) դեպի դարպաս: Սերվերից չի պահանջվում ֆայլի վերջի նիշ ուղարկել CONTENT_LENGTH տվյալների բայթ ուղարկելուց և դարպասի կողմից դրանք կարդալուց հետո:

Օրինակ

Որպես օրինակ վերցնենք POST մեթոդով (METHOD=POST) ձևի արդյունքը։ Թող լինի 7 բայթ կոդավորված այսպես.
a=b&b=c.

Այս դեպքում սերվերը CONTENT_LENGTH-ը կսահմանի 7, իսկ CONTENT_TYPE-ը՝ application/x-www-form-urlencoded: Դարպասի ստանդարտ մուտքագրման առաջին նիշը կլինի «a», որին հաջորդում է կոդավորված տողի մնացորդը:

Հրամանի տողի փաստարկներ

Հրամանի տողում գտնվող դարպասը սերվերից ստանում է.

  • URL-ի մնացած մասը դարպասի անունից հետո՝ որպես առաջին պարամետր (առաջին պարամետրը դատարկ կլինի, եթե առկա է միայն դարպասի անունը), և
  • հիմնաբառերի ցանկը որպես որոնման սցենարի հրամանի տողի մնացորդ, կամ
  • դաշտերի անունների փոփոխվող ձևերի հավասարման նշանով (զույգ դիրքերում) և համապատասխան փոփոխական արժեքներով (կենտ դիրքերում):

Հիմնաբառերը, ձևի դաշտերի անունները և արժեքները փոխանցվում են վերծանված (HTTP URL կոդավորման ձևաչափից) և վերակոդավորվում են Bourne shell-ի կոդավորման կանոնների համաձայն, այնպես որ հրամանի տողում գտնվող դարպասը կստանա տեղեկատվությունն այնպես, ինչպես կա, առանց: լրացուցիչ փոխարկումների անհրաժեշտությունը:

ՁԵՎԵԼ հայտարարություններ

FORM հայտարարությունները մշակվում են այնպես, որ դաշտի անվանման յուրաքանչյուր պարամետր ավարտվում է հավասարման նշանով, իսկ մնացորդը տվյալ պարամետրի արժեքն է: Եթե ​​սցենարի անունից հետո որևէ բան կա (gateway), ապա այս տեղեկատվությունը փոխանցվում է որպես առաջին պարամետր: Հակառակ դեպքում, առաջին պարամետրը դատարկ կլինի:

Օրինակներ.

/htbin/foo/x/y/z?name1=value1&name2=value2 կոչվում է հետևյալ կերպ. կոչվում է որպես՝ /.../foo "" name1= value1 name2= value2

CGI միջավայրի փոփոխականներ

Հետևյալ միջավայրի փոփոխականները հատուկ չեն հարցման տեսակին և սահմանված են բոլոր հարցումների համար:

SERVER_SOFTWARE Տեղեկատվական սերվերի անունը և տարբերակը, որը պատասխանում է հարցումին (և սկսում է դարպասը): Ձևաչափ. անուն/տարբերակ SERVER_NAME Հոսթի անվանումը, որտեղ աշխատում է սերվերը, DNS անունը կամ IP հասցեն, ինչպես նշված է URL-ում: GATEWAY_INTERFACE CGI ճշգրտման տարբերակը սերվերի կազմման պահին: Ձևաչափ՝ CGI/տարբերակ

Հետևյալ միջավայրի փոփոխականները հատուկ են տարբեր հարցումների և լրացվում են նախքան դարպասը կանչելը. Ձևաչափ՝ արձանագրություն/տարբերակ SERVER_PORT Պորտի համարը, որով հարցումն ուղարկվել է REQUEST_METHOD Մեթոդը, որն օգտագործվել է հարցումը կատարելու համար: HTTP-ի համար սա է ՍՏԱՆԱԼ, ԳԼՈՒԽ, ՓՈՍՏև այլն։ PATH_INFO Հաճախորդի կողմից տրամադրված լրացուցիչ ուղու մասին տեղեկատվություն: Այլ կերպ ասած, դարպասը կարելի է մուտք գործել վիրտուալ ճանապարհով, որին հաջորդում են որոշ լրացուցիչ տեղեկություններ: Այս տեղեկատվությունը փոխանցվում է PATH_INFO-ին: PATH_TRANSLATED Սերվերն ուղարկում է PATH_INFO-ի թարգմանված տարբերակը, որը ներառում է վիրտուալից ֆիզիկականի փոխարկված ուղին: SCRIPT_NAME Գործարկվող դարպասի վիրտուալ ուղին, որն օգտագործվում է URL-ը ստանալու համար: QUERY_STRING Տեղեկատվությունը հետևո՞ւմ է: URL-ում, որին վերաբերում է այս դարպասը: Այս տեղեկատվությունը հարցման տող է: Այն ոչ մի կերպ չպետք է վերծանվի: Անկախ հրամանի տողից, այս փոփոխականը միշտ պետք է սահմանվի, երբ այս տեղեկատվությունը հասանելի է, . REMOTE_HOST Հարցում կատարող հյուրընկալողի անունը: Եթե ​​սերվերը չունի այս տեղեկատվությունը, այն ՊԵՏՔ Է սահմանի REMOTE_ADDR և թողնի այս դաշտը չկարգավորված: Հարցումը կատարող հյուրընկալողի REMOTE_ADDR IP հասցեն: AUTH_TYPE Եթե սերվերն աջակցում է օգտատիրոջ նույնականացմանը, իսկ դարպասը կեղծիքից պաշտպանված է, ապա այս արձանագրությանը հատուկ նույնականացման մեթոդն օգտագործվում է օգտատիրոջ վավերացման համար: REMOTE_USER Օգտագործվում է նախորդ դեպքի նման իրավիճակներում՝ օգտանունը պահելու համար: REMOTE_IDENT Եթե HTTP սերվերն աջակցում է RFC 931 օգտվողի նույնականացմանը, ապա այս փոփոխականը կպարունակի սերվերից ստացված օգտվողի անունը: CONTENT_TYPE Լրացուցիչ լրացուցիչ տեղեկություններ պարունակող հարցումների համար, ինչպիսիք են HTTP POST-ը և PUT-ը, սա պարունակում է այս տեղեկատվության տվյալների տեսակը: CONTENT_LENGTH Տվյալների երկարությունը, որն ուղարկում է հաճախորդը:

Բացի դրանցից, եթե հարցումը պարունակում է լրացուցիչ հարցման վերնագրի դաշտեր, դրանք տեղադրվում են HTTP_ նախածանցով շրջակա միջավայրի փոփոխականներում, որին հաջորդում է վերնագրի անունը: Վերնագրի ցանկացած «-» նիշը փոխվում է «_» ընդգծման: Սերվերը ԿԱՐՈՂ Է բաց թողնել իր կողմից արդեն մշակված վերնագրերը, ինչպիսիք են Թույլտվությունը, Բովանդակության տեսակը և Բովանդակության երկարությունը: Անհրաժեշտության դեպքում, սերվերը ԿԱՐՈՂ Է բացառել վերնագրի ցանկացած (կամ բոլոր) լրացուցիչ դաշտերը, եթե դրանց ընդգրկումը կհանգեցնի շրջակա միջավայրի փոփոխականի չափի սահմանաչափի գերազանցմանը: Նման փոփոխականի օրինակ է HTTP_ACCEPT փոփոխականը, որը սահմանվել է CGI/1.0 ճշգրտման մեջ: Մեկ այլ օրինակ է User-Agent վերնագիրը:

HTTP_ACCEPT MIME տեսակների ցանկ, որոնք հաճախորդը կարող է մշակել, ինչպես նշված է HTTP վերնագրերում: Այլ արձանագրություններն այս տեղեկատվությունը պետք է ստանան այլ վայրերից (եթե դրա կարիքն ունեն): Այս ցանկի յուրաքանչյուր տեսակ պետք է բաժանված լինի ստորակետով` համաձայն HTTP-ի բնութագրերի: Ձևաչափ. տեսակ/ենթատեսակ, տեսակ/ենթատեսակ HTTP_USER_AGENT Դիտիչը, որն օգտագործում է հաճախորդը հարցումն ուղարկելու համար: Ընդհանուր ձևաչափ՝ ծրագիր/տարբերակի գրադարան/տարբերակ։

Տեղեկատվության դուրսբերում դարպասի միջոցով

Հիմնական հասկացություններ

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

Սովորաբար, gateway-ն արտադրում է իր արտադրանքը, որը մեկնաբանվում և հետ է ուղարկվում հաճախորդին: Այս մոտեցման առավելությունն այն է, որ gateway-ը չպետք է ուղարկի ամբողջական HTTP/1.0 վերնագիրը յուրաքանչյուր հարցում:

Ելքային հոսքի վերնագիր

Որոշ դարպասների համար կարող է անհրաժեշտ լինել խուսափել սերվերի կողմից դրանց արտադրանքի մշակումից և ուղղակիորեն շփվել հաճախորդի հետ: Նման դարպասները մյուսներից տարբերելու համար CGI-ն պահանջում է, որ դրանց անունները սկսվեն nph- նախածանցով: Այս դեպքում դարպասի պարտականությունն է հաճախորդին վերադարձնել շարահյուսական ճիշտ պատասխանը:

Վերնագրեր վերլուծությամբ

Դարպասի ելքը սկսվում է փոքր վերնագրով: Այն պարունակում է տեքստային տողեր՝ նույն ձևաչափով, ինչ HTTP վերնագրում, և ավարտվում է դատարկ տողով (պարունակում է միայն նոր տող կամ CR/LF նիշ)։

Ցանկացած վերնագրի տող, որը սերվերի հրահանգներ չեն, ուղարկվում են անմիջապես հաճախորդին: Ներկայումս CGI ճշգրտումը սահմանում է երեք սերվերի հրահանգներ. Content-type Վերադարձված փաստաթղթի MIME տեսակը: Տեղադրություն Այս դաշտն օգտագործվում է, երբ անհրաժեշտ է սերվերին նշել, որ ոչ թե փաստաթուղթն է վերադարձվում, այլ դրա հղումը:

Եթե ​​փաստարկը URL է, ապա սերվերը կհանձնարարի հաճախորդին վերահղել հարցումը: Եթե ​​արգումենտը վիրտուալ ուղի է, ապա սերվերը կվերադարձնի այդ ուղով նշված փաստաթուղթը հաճախորդին, կարծես հաճախորդը դա ուղղակիորեն խնդրել է:

  • Կարգավիճակ

Այս հրահանգը օգտագործվում է HTTP/1.0 սերվերին կարգավիճակի տող տալու համար, որը կուղարկվի հաճախորդին: Ձևաչափ. nnn xxxxx, որտեղ nnn-ը եռանիշ կարգավիճակի կոդ է, իսկ xxxxx-ը պատճառի տող է, ինչպիսին «Արգելված է»:

Օրինակներ

Ենթադրենք, կա տեքստ HTML փոխարկիչ: Երբ այն ավարտի իր աշխատանքը, այն պետք է արտադրի հետևյալ արդյունքը ստանդարտ ելքային հոսքի վրա.

Արդյունքի սկիզբ - Բովանդակության տեսակ. տեքստ/html - ելքի ավարտ - Այժմ դիտարկեք մի դարպաս, որը որոշ դեպքերում պետք է սպասարկի փաստաթուղթը /path/doc.txt տվյալ սերվերից այնպես, կարծես այն ուղղակիորեն պահանջվել է հաճախորդի կողմից՝ միջոցով: http://server:port/path/doc.txt. Այս դեպքում, gateway-ի ելքը կլինի. ncsa.uiuc.edu/ . Դարպասի ելքը կլինի. Չվերլուծված վերնագրեր

Եկեք հիմա ենթադրենք, որ մենք ունենք դարպաս, որը անմիջականորեն շփվում է հաճախորդի հետ: Ինչպես նշվեց, նրա անունը պետք է սկսվի nph- նախածանցով, և այն պետք է վերադարձնի վավեր HTTP վերնագիր: Այս դեպքում, եթե դարպասը մուտք է գործել HTTP/1.0 SERVER_PROTOCOL արժեքով, դրա ելքը պետք է համապատասխանի HTTP/1.0-ին.

Ելքի սկիզբ - HTTP/1.0 200 OK Սերվեր՝ NCSA/1.0a6 Բովանդակության տեսակ՝ տեքստ/պարզ - ելքի վերջ -


-Երկարությունը՝ 22

name=Vasya&okbutton=OK

Մեթոդն օգտագործելիս ՓՈՍՏձևի տվյալները ուղարկվում են «երկու Մուտքագրեք-ov" ​​- հարցումի մարմնում: Վերևում գտնվող ցանկացած բան իրականում հարցման վերնագիրն է (և երբ մենք օգտագործում էինք ՍՏԱՆԱԼ, ձևի տվյալները ուղարկվել են վերնագրում):

Որպեսզի սերվերը իմանա, թե որ բայթով պետք է ավարտվի հարցման մարմնի ընթերցումը, վերնագրում կա տող բովանդակության երկարությունը; մոտավորապես նույնը, որ ձևի տվյալները կփոխանցվեն որպես պարամետր1=արժեք1&պարամետր2=արժեք2...,և արժեքները փոխանցվում են ձևով urlencode- այսինքն՝ նույն կերպ, ինչ մեթոդի կիրառմամբ ՍՏԱՆԱԼ, բայց հարցման հիմնական մասում վերնագիրը հաղորդվում է սերվերին «Բովանդակության տեսակ. հավելված/x-www-form-urlencoded».

Այն մասին, թե ինչ է urlencode- մի քիչ ցածր:

Մեթոդի առավելությունը POST:ձևի տվյալների հետ տողի երկարության սահմանափակում չկա:

Մեթոդն օգտագործելիս ՓՈՍՏհնարավոր չէ ձևը ներկայացնել պարզապես «հետևելով հղմանը», ինչպես դա եղել է ՍՏԱՆԱԼ.

Հակիրճության համար ներկայացնենք «GET form» և «POST ձև» տերմինները, որտեղ նախածանցը համապատասխանում է հատկանիշի արժեքին. մեթոդհատկորոշել

.

Օգտագործելով ՓՈՍՏ-ձևը՝ իր հատկանիշով գործողությունկարելի է նշել հարցականից և պարամետրերից հետո ՍՏԱՆԱԼ- ձևեր. Այսպիսով, մեթոդը ՓՈՍՏներառում է մեթոդը ՍՏԱՆԱԼ.

CGI տեխնոլոգիա

Մենք հասկացանք, թե ինչպես ստեղծել HTML-ձևը և ինչպես է զննարկիչը ուղարկում դրանում մուտքագրված տվյալները սերվեր: Սակայն դեռ պարզ չէ, թե սերվերն ինչ է անելու այս տվյալների հետ։

Ինքնին վեբ սերվերը կարող է վերադարձնել միայն պահանջված էջը, և ոչ ավելին, և ներկայացված ձևի բոլոր տվյալները, ընդհանուր առմամբ, լիովին անտարբեր են դրա նկատմամբ: Որպեսզի կարողանանք այս տվյալները մշակել ցանկացած ծրագրի միջոցով և դինամիկ կերպով արձագանքել բրաուզերին, հորինվեց CGI (Common Gateway Interface) տեխնոլոգիան։

Եկեք նայենք սա URL: http://www.example.com/cgi-bin/form_handler.cgi. Առաջին ենթադրությունը, որը կարելի է անել այդ մասին, սովորաբար սա է. սերվերը վերադարձնում է ֆայլի բովանդակությունը form_handler.cgiկատալոգից cgi-bin. Այնուամենայնիվ, տեխնիկայի դեպքում CGIբաները տարբեր են. Սերվերը սկսում է ծրագիրը form_handler.cgiև փոխանցում է ձևի տվյալները: Ծրագիրը գեներացնում է տեքստը, որը փոխանցվում է դիտարկիչին՝ որպես հարցման պատասխան:

ծրագիրը form_handler.cgiկարելի է գրել ցանկացած ծրագրավորման լեզվով, գլխավորը ծրագրում ստանդարտին հետեւելն է CGI. Դուք կարող եք օգտագործել, օրինակ, հայտնի սկրիպտային Perl լեզուն: Եվ դուք կարող եք գրել ամեն ինչ C-ով, կամ shell-ի սկրիպտներով... Օրինակ, եկեք այս ծրագիրը գրենք C-ով: Բայց նախ, եկեք պարզենք, թե ինչպես են տվյալները փոխանակվում վեբ սերվերի և CGI- ծրագիր:

1. Մինչ CGI ծրագիրը սկսելը, սերվերը սահմանում է շրջակա միջավայրի փոփոխականներ (դրանք հավանաբար գիտեք PATH հրամանից): Յուրաքանչյուր քիչ թե շատ լուրջ ծրագրավորման լեզու ունի միջավայրի փոփոխականներ կարդալու հնարավորություններ: CGI ստանդարտը սահմանում է փոփոխականների շատ նշանակալի շարք, որոնք պետք է սահմանվեն նախքան CGI ծրագիրը գործարկելը: Եկեք հիմա նայենք դրանցից միայն երեքին.

REQUEST_METHOD- տվյալների փոխանցման մեթոդ - ՍՏԱՆԱԼկամ ՓՈՍՏ(կան ուրիշներ, բայց մենք դրանք դեռ չենք համարում)

QUERY_STRING- պարունակում է մաս URLհարցականից հետո, կամ այլ կերպ ասած՝ տվյալները ՍՏԱՆԱԼ- ձևեր.

CONTENT_LENGTH- պահանջել մարմնի երկարությունը (տվյալներ ՓՈՍՏ- ձևեր):

2. Սերվերը սկսվում է CGI- ծրագիր. Հարցման մարմինը փոխանցվում է ծրագրին որպես ստանդարտ մուտք ( ստդին) - կարծես այս տվյալները մուտքագրվել են ստեղնաշարից:

3. Ծրագիրը տպում է բրաուզերի պատասխանը ստանդարտ ելքին ( stdout) - "էկրանի վրա". Այս ելքը ընդհատվում է վեբ սերվերի կողմից և փոխանցվում դիտարկիչին:

այն CGI- ծրագիր համար Սի, ցուցադրելով վեբ սերվերից ստացված ձևի պարամետրերի բովանդակությունը.

1. #ներառել

2. #ներառել

4. int main (անվավեր)

6. // Կարդացեք վեբ սերվերի կողմից սահմանված միջավայրի փոփոխականները

7. char *query_string = getenv("QUERY_STRING");

8. char *request_method = getenv("REQUEST_METHOD");

10. char *post_data; // Բուֆեր POST հարցման տվյալների համար

11. int post_length = 0; // Պահանջել մարմնի երկարությունը

13. if (strcmp(request_method, "POST") == 0) (// Եթե ստացվել է POST հարցում,

14. post_length = atoi(getenv("CONTENT_LENGTH")); // սկզբից կարդաց

15. // շրջակա միջավայրի փոփոխական իր երկարությունը,

16. if (post_length) (// եթե այն զրոյական չէ,

17. post_data = (char*)malloc(post_length+1); // հատկացնել հիշողություն բուֆերի համար,

18. fread(post_data, post_length, 1, stdin); // կարդալ հարցման մարմինը ստանդարտ մուտքագրումից,

19. post_data = 0; // վերջացրեք տողը զրոյական բայթով:

23. // Տպել պատասխանի վերնագիրը...

Դուք հավանաբար հանդիպել եք էջերի, որոնք նախկինում գոյություն չունեին, և որոնք ստեղծվել են դինամիկ ձեր ցանկությամբ՝ ձևավորված, ինչպես ասում են, «թռիչքի վրա»:

Օրինակ, ցանկացած գրախոսական գիրք տրամադրում է ձեզ հատուկ ձև, որտեղ դուք ավելացնում եք ձեր կարծիքը, և հաջորդ անգամ, երբ բացեք այդ էջը, այն կպարունակի նոր հաղորդագրություն:

Տեխնոլոգիաներից մեկը, որը թույլ է տալիս դինամիկ բովանդակություն ավելացնել վեբ էջերին, կոչվում է CGI: Այն թույլ է տալիս կապվել որոշակի URL-ի հետ ոչ միայն ստատիկ փաստաթղթի, այլ ծրագրի, որի արդյունքում կարող են իրական ժամանակում տվյալներ ստեղծվել:

Դիտարկենք եղանակի մասին տեղեկատվության տրամադրման օրինակ: Եղանակի հաշվետվությունը փոխվում է ամեն օր, և ամեն օր կարող է ստեղծվել նոր ստատիկ կանխատեսման էջ: Այնուամենայնիվ, եթե ցանկանում եք տրամադրել ակնթարթային տվյալներ, դուք պետք է ամեն անգամ նոր էջ ստեղծեք: Սա կարող է իրականացվել CGI տեխնոլոգիայի հիման վրա: Սերվեր մուտք գործելու պահին նրա վրա գործարկվում է CGI ծրագիր, որը մուտք է գործում թվային չափիչ սարք և տեղեկատվություն է տրամադրում ջերմաստիճանի, ճնշման և այլնի մասին։ Հաջորդ անգամ, երբ կապվեք այս հասցեի հետ, դուք կստանաք նոր տեղեկատվություն:

Մեկ այլ օրինակ. երբ դուք լրացնում եք ինչ-որ հարցում, օրինակ, հարցումը որոնման համակարգում, դուք հետ եք ստանում CGI ծրագրի արդյունքները ձեր փնտրած հասցեների հավաքածուի տեսքով:

Դուք կարող եք պատկերացնել CGI ծրագիրը որպես վեբ սերվերի մի մաս, որն իրական ժամանակում աշխատում է վեբ սերվերի կողմից: Սերվերը օգտատիրոջ հարցումները փոխանցում է CGI ծրագրին, որը մշակում է դրանք և իր աշխատանքի արդյունքները վերադարձնում օգտագործողի էկրանին (նկ. 3): Վեբ սերվերների մեծ մասում CGI մեխանիզմը կազմակերպված է հետևյալ կերպ. ստեղծվում է հատուկ ենթացուցակ, որում պահվում են նման ծրագրերը, և վեբ սերվերի ադմինիստրատորը կարգավորում է մուտքը դեպի այն, որպեսզի դրանից ֆայլերը չկարդան, այլ գործարկվեն: Ծրագրի արդյունքը ուղարկվում է զննարկիչին՝ ի պատասխան հարցման: Հաճախորդի տեսանկյունից տարբերություն չկա՝ URL-ը ստատիկ փաստաթուղթ է, թե CGI ծրագիր: Բրաուզերը նույն կերպ է ընկալում տեղեկատվությունը, անկախ նրանից՝ այն ստեղծվում է անմիջապես, թե ստատիկ էջ է։ CGI ծրագրի արդյունքն ունի նույն ձևաչափը, ինչ ստատիկ փաստաթուղթը:

CGI հապավումը պետք է հանդիպած լինի ձեզ ձեր բրաուզերի գծում Համաշխարհային ցանցը զննարկելիս, և դուք, ամենայն հավանականությամբ, տեսել եք հղումը դեպի /cgi-bin/՝ այն գրացուցակը, որտեղ սովորաբար գտնվում են cgi ծրագրերը: Շատ ինտերակտիվ ծառայություններ, ինչպիսիք են հյուրերի գիրքը, ֆորումը և այլն, հիմնված են cgi ծրագրերի վրա:


«CGI» տերմինը նշանակում է ոչ միայն ծրագիր, այլև արձանագրություն։ Այս առումով, CGI-ն վեբ սերվերի ստանդարտ եղանակն է՝ օգտվողի հարցումը կիրառական ծրագրին փոխանցելու և տվյալները ետ ստանալու՝ դրանք օգտվողին փոխանցելու համար: Սերվերի և հավելվածի միջև տվյալների փոխանցման CGI արձանագրությունը HTTP արձանագրության մի մասն է:

Հարկ է նշել, որ եթե դուք պատրաստվում եք տեղադրել ձեր էջը անվճար հոսթինգ սերվերների վրա, ապա միանգամայն հնարավոր է, որ cgi սկրիպտները չաջակցվեն այս սերվերների վրա։

CGI-ի այլընտրանքը Microsoft-ի Active Server Page (ASP) տեխնոլոգիան է, որը կառուցված է նույն սկզբունքով. վեբ էջի մեջ ներառված սկրիպտը կատարվում է սերվերի վրա՝ նախքան էջը օգտվողին ուղարկելը:

Կան այլ տեխնոլոգիաներ, որոնք աշխատում են նույն սկզբունքով։

Ինչպես երևում է նկ. 3, CGI ծրագիրը աշխատում է սերվերի կողմից:

Այնուամենայնիվ, հնարավոր է նաև դինամիկ էջեր կազմակերպել՝ հաճախորդին փոխանցելով համակարգչային ծրագրեր, որոնք ստեղծում են դինամիկ էջի բովանդակություն արդեն հաճախորդի կողմից (նկ. 4):

Բրինձ. չորս

Այս տեխնոլոգիան իրականացվում է հետևյալ կերպ. ակտիվ փաստաթղթերը պահվում են վեբ սերվերների վրա և ներբեռնվում տեղական համակարգիչ նույն ձևով, ինչ ստատիկ էջերը, սակայն ակտիվ փաստաթղթային ծրագիրը տեղական համակարգչում հայտնվելուց հետո այն սկսում և որոշակի հաշվարկներ է կատարում օգտատիրոջ համակարգչում: , հենվելով տեղական հաշվողական ռեսուրսների վրա։ Եվ այս հաշվարկների արդյունքներն արդեն ցուցադրվում են էկրանին։ Համապատասխանաբար, էկրանին տվյալների ցուցադրման արագությունը կախված չէ հեռավոր սերվերի հետ հաղորդակցության արագությունից, քանի որ ակտիվ փաստաթղթի ելքը տեղի է ունենում միայն այն բանից հետո, երբ այն ներբեռնվել է տեղական համակարգչում: Ակտիվ փաստաթղթեր ստեղծելու համար կարող են օգտագործվել տարբեր տեխնոլոգիաներ՝ JavaScript հավելվածներ, Java հավելվածներ և ActiveX հսկիչներ: