Neograničena trgovina cgi. Jasna e-trgovina. Opća strategija programiranja

E-trgovina na čistom ruskom. Kako funkcionira online poslovanje?

U posljednje vrijeme sve je više projekata vezanih uz online trgovanje. Proučavajući ovo područje, nisam mogao pronaći općeniti i razumljiv opis procesa. Stoga sam odlučio napraviti nešto poput varalice na koju se uvijek možete osvrnuti kako biste razumjeli postupak u području kao što je e-trgovina.

Odmah ću reći da sam se usredotočio na procese i kanale koji pomažu privlačenju klijenata.

E-trgovina: o čemu se radi?

Definicije na različiti izvori reći nešto o prodaji robe ili usluga putem interneta. Jednostavnim riječima, e-trgovina je svaka online aktivnost u kojoj se pojavljuje novac.

Kupnja, prodaja, osiguranje, bankarstvo, elektronički novac, sve je ovdje. Uzmi i potpiši.

Od cilja

Kako bismo razumjeli problem, predlažem da krenete putem od samog kraja. Što je cilj svakog poslovanja? Tako je, zaradite. Dakle, zamislite bilo koji proizvod, na primjer, silikonske čarape. Zašto ne!

Uzeo sam prvo što mi je palo na pamet, pokazalo se da postoji nešto ovako...

Naš zadatak je zaraditi na ovim čarapama. Razmišljamo o internetu. Hmm ... zašto ne napraviti web stranicu i tako će ići prodaja, samo mi zadržite Maldive! Ali nije to tako jednostavno.

Jako volim crtati. To pomaže u razumijevanju različitih procesa. Nacrtajmo?!

Za sada naš model izgleda ovako. Uzmemo čarape, stavimo ih na internet i dobijemo novac. Ovo je jednostavno super! Oči vas peku, dlanovi vam se znoje i već želite prionuti na posao. Ali trebate li napraviti web stranicu ili prodajnu platformu?

Web stranica ili platforma na prodaju

Jesti razna rješenja za postavljanje vašeg proizvoda na World Wide Web. Možete izraditi vlastitu web stranicu ili koristiti platforme trećih strana (grupe, stranice na društvenim mrežama, oglasne ploče itd.). Zaustavimo se na mjestu.

Naručili ste web mjesto, uzeli gotov predložak ili ga sami izradili pomoću alata za izradu web stranica (možete guglati CMS), nije bitno. Zatim smo stavili hrpu silikonskih čarapa različiti tipovi i sretan.

Oprostite što prekidam čitanje. Pridružite se mom telegram kanalu. Svježe najave članaka, razvoj digitalnih proizvoda i growth hack, sve je tu. Čekam te! Nastavimo...

Sustavi plaćanja

No, kako bi osoba mogla kupiti od vas ovdje i sada, bit će potrebno prilagoditi sustave plaćanja. Ovo je vrsta usluge koja vam omogućuje kupnju putem interneta putem: bankovnih kartica, Internet novca, Mobiteli i hrpa više. Za ovo ćete morati dijeliti postotak transakcija, ali na ovaj način ćete si znatno olakšati život.

Odaberite uslugu koja vam odgovara. Negdje će postotak biti veći, a negdje će biti pretplata ili nešto treće. Samo malo istražite. Stavite traženi kod na svoju web stranicu, povežite sve transakcije s računom kartice i eto!

Čini se da je to sve. Postoji web stranica, kartice proizvoda također, pa čak i gumb "kupi" radi, ali nešto nedostaje... Nema protoka kupaca koji će kupiti.

Tokovi kupaca

Gdje je: CAC = trošak stjecanja novog kupca. MCC (troškovi marketinške kampanje) = Ukupni trošak marketinških troškova usmjerenih na privlačenje kupaca (ali ne i njihovo zadržavanje). W (plaće) = plaća za trgovce i voditelje prodaje. S (softver) = trošak softvera koji se koristi u oglašavanju i prodaji (na primjer, korištena prodajna platforma, marketinška automatizacija, A/B testiranje, usluge analitike itd.). PS (profesionalne usluge) = Trošak profesionalne usluge usluge koje se pružaju odjelima marketinga i prodaje (dizajn, savjetovanje, itd.). O (ostalo) = Ostali režijski troškovi koji se odnose na odjele marketinga i prodaje. CA (customersacquired) = Ukupan broj privučenih kupaca.

Ali ne smijemo zaboraviti na kvalitetu klijenta; LTV će tu pomoći.

Važna metrika: LTV

Live Time Value, životni ciklus korisnika, još je jedan pokazatelj u e-trgovini koji treba uzeti u obzir. Prikazuje koliki prihod u prosjeku donosi jedan klijent. Postoje različiti pristupi izračunu, ja sam odabrao stvarni na temelju dobiti, kao jedan od najtočnijih.

Ovo je jednostavno zbroj ukupnog prihoda tijekom cijele povijesti kupovine za svakog pojedinog kupca. Dodajte zbroj svih kupnji kupaca (transakcija) transakciji N, gdje je transakcija N posljednja kupnja koju je kupac obavio u vašoj tvrtki. Ako imate pristup svim podacima o transakcijama kupaca, to možete jednostavno izračunati pomoću programa Excel.

LTV = (transakcija 1 + transakcija 2 + transakcija 3... + transakcija N) x udio dobiti u prihodu.

Izračun LTV-a na temelju neto dobiti u konačnici pokazuje stvarnu dobit koju kupac donosi vašoj tvrtki. Ovo uzima u obzir troškove korisničke usluge, troškove zadržavanja, troškove privlačenja itd. Rezultat je cijeli kompleks izračuna na temelju pojedinačnih podataka. Ukupna dobit ostvarena po klijentu tijekom vremena dat će vam točan uvid u profitabilnost vaših kupaca do danas.

Ostali pristupi mogu se pronaći na.

Važni pokazatelji: CAC i LTV omjer

Za razumijevanje održivosti poslovanja vrlo je važno pogledati omjer dva spomenuta CAC:LTV omjera.

  • Manje od 1:1 – Punom brzinom jurite prema bankrotu.
  • 1:1 – Gubite novac na svakom privučenom klijentu.
  • 1:2 – Čini se dobro, ali čini se da ne ulažete dovoljno novca, a mogli biste se brže razvijati. Pokrenite agresivnije kampanje za stjecanje kupaca i postignite stope blizu 1:3.
  • 1:3 – Idealan omjer. Imate uspješan posao i snažan poslovni model.

Važni pokazatelji: ROI ne zaboravite

Kao što smo već spomenuli, u e-trgovini morate jasno razumjeti je li isplativo koristiti kanal akvizicije ili ne. Uz LTV i CAC, postoji još jedan važan pokazatelj: ROI. Pokazuje je li se vaša investicija, u našem slučaju u oglašavanje, isplatila. To je. koliko nam je na kraju donijela 1 uložena rublja.

Za izračun se koristi vrlo jednostavna formula:

Pri čemu je "Prihod od kampanje" razlika između prihoda od kanala i cijene vašeg proizvoda. A da biste izračunali dobit, oduzmite troškove oglašavanja.

Dakle, detaljnija formula bi izgledala ovako:

ROI = (prihod od kanala – trošak) – troškovi oglašavanja / troškovi oglašavanja x 100%

Pročitajte detaljniji primjer s izračunom. Zapravo, ova jednostavna formula nalazi se u istoj Excel tablici, gdje se sve automatski izračunava.

Sva tri pokazatelja o kojima smo govorili važna su u e-trgovini. Svaki od njih omogućuje vam pronalaženje uskih grla u vašim tokovima i rad s njima. Tu leži potencijal za rast poslovanja. Dodala sam još malo na naš model sa čarapama.

Nemoguće je sve stati u jedan materijal, a tko će ga čitati toliko dugo? Kasnije ću napraviti zaseban vodič o nijansama e-trgovine koje mogu ometati prodaju.

Ukupno

Općenito, sada imate općenito razumijevanje online trgovine ili e-trgovine. Nadalje, kako kažu: “Đavo je u detaljima.” Proučite svaki kanal posebno, izračunajte pokazatelje uspješnosti i tražite nove spoznaje u malim stvarima. Internet prodaja za vas, i više! I imam još jedan materijal.

Da, skoro sam zaboravio, sretna Nova godina, dragi čitatelji! Želim vam velike pobjede i uspjehe sljedeće godine!

Vlasnici internetskih trgovina iz prve su ruke upoznati s pojmom "elektronička trgovina"; oni već znaju odgovor na pitanje "e-trgovina - što je to?" Ali ako dođete do dna, pojavljuju se mnoge nijanse i ovaj pojam poprima šire značenje.

E-trgovina: što je to?

Opći koncept je sljedeći: e-trgovina se shvaća kao određeni pristup poslovanju koji uključuje uključivanje niza operacija koje koriste digitalni prijenos podataka u pružanju robe ili pružanju usluga/radu, uključujući korištenje Internet.

Dakle, to je svaka komercijalna transakcija koja se provodi korištenjem elektroničkog sredstva komunikacije.

Shema rada je uređena na sljedeći način:

  • svatko može biti bloger ili bilo koji drugi vlasnik vlastite Internet stranice) registrira se u ovaj sustav;
  • dobiva svoju vezu;
  • postavlja poseban kod na svoju web stranicu - pojavljuje se oglas za odabranog službenog partnera e-Commerce Partners Network;
  • prati pretvorbu web stranice;
  • zarađuje određeni postotak za svaku kupnju posjetitelja vaše web stranice koji slijedi affiliate poveznicu.

WP e-trgovina

Velik broj ljudi sada se strastveno bavi e-trgovinom, prvenstveno zbog želje za stvaranjem vlastite web stranice, jedinstvene online trgovine za prodaju vlastitih proizvoda. Kako bi zadovoljili ovu rastuću potražnju, programeri su se usredotočili na stvaranje predložaka za e-trgovinu. Pogledajmo što je ovo sljedeće.

Jedan takav primjer predloška je WordPress e-trgovina. Riječ je o dodatku za košaricu za WordPress (jedan od najpoznatijih sustava za upravljanje web resursima), namijenjen prvenstveno kreiranju i organiziranju blogova). Dostupan je potpuno besplatno i omogućuje posjetiteljima stranice da kupuju na web stranici.

Drugim riječima, ovaj dodatak vam omogućuje stvaranje online trgovine (temeljene na WordPressu). Ovaj dodatak za e-trgovinu ima sve potrebne alate, postavke i opcije koje zadovoljavaju suvremene potrebe.

Andover, Massachusetts, 19. studenog 2003

The Commerce Group, Inc. (NYSE: CGI), najveći pisac osiguranja privatnih putničkih automobila u Massachusettsu i CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), vodeći pružatelj usluga informacijske tehnologije i poslovne obrade, najavio je danas potpisivanje šestogodišnjeg ugovora o obnovi poslovnih procesa (BPO) u vrijednosti od 35 milijuna USD. CGI će pružati potpune usluge obrade pravila za Massachusetts privatne putničke i komercijalne automobilske linije, kao i pružanje CGI-jevog alata za sučelje agencije CollaborativeEdge, podršku za aplikacije i održavanje, regulatornu podršku, savjetovanje o sustavima i usluge upravljanja dokumentima.

Gerald Fels, izvršni potpredsjednik i financijski direktor Commerce Groupa, izjavio je: "Kao vodeći dobavljač privatnih osobnih automobila u Massachusettsu, naš je cilj pružiti našim agentima i zaposlenicima usluge koje im pomažu da rade na najvišoj razini. Tijekom godina njegovali smo čvrst odnos s CGI-jem. Njihov je sustav robustan i precizan, a njihov tim dobro poznaje naše interne sustave obrade. To je važno za nas."

Serge LaPalme, predsjednik odjela za poslovne usluge osiguranja za CGI, dodao je: "Veoma smo zadovoljni što nastavljamo naš odnos s grupom Commerce, koji traje više od 30 godina. Grupa Commerce nastavlja biti jedan od naših cijenjenih poslovnih partnera i strateška je za naš uspjeh. Pomažući našim klijentima da se dalje usredotoče na njihovu osnovnu djelatnost, iskorištavamo prednosti novih tehnologija kada i gdje to ima smisla. Naš tim dobro poznaje industriju osiguranja i vrlo jedinstveno regulatorno okruženje države i kao rezultat toga su brzi prilagoditi postojeća rješenja ovom sektoru koji se stalno razvija."

O The Commerce Group, Inc.

Commerce Group, Inc., osiguravajući holding, ima sjedište u Websteru, Massachusetts. Podružnice osiguranja imovine i nezgode Commerce Group uključuju The Commerce Insurance Company i Citation Insurance Company u Massachusettsu, Commerce West Insurance Company u Kaliforniji i American Commerce Insurance Company u Ohiu. Preko svojih podružnica" kombiniranih osiguravateljskih aktivnosti, Commerce Group je rangirana kao 22. najveća grupa za osiguranje osobnih automobila u zemlji od A.M. Najbolje, na temelju izravnih pisanih premium informacija iz 2002.

O CGI-ju
Osnovan 1976., CGI je peta najveća neovisna tvrtka za usluge informacijske tehnologije u Sjevernoj Americi, na temelju broja zaposlenih. CGI i njegove podružnice zapošljavaju 20.000 stručnjaka. Godišnja stopa prihoda CGI-ja trenutno iznosi 2,8 milijardi USD (1,9 milijardi USD), a 30. rujna 2003. neriješene narudžbe CGI-ja iznosile su 12,3 milijarde USD (9,1 milijarda USD). CGI pruža end-to-end IT i usluge poslovnih procesa klijentima širom svijeta iz ureda u Kanadi, Sjedinjenim Državama i Europi. Dionice CGI-ja kotiraju na TSX (GIB.A) i NYSE (GIB) i uključene su u TSX 100 Composite Index, kao i S&P/TSX Canadian Information Technology i Canadian MidCap Indexs.

Zahvaljujući World Wide Webu, gotovo svatko može pružiti informacije putem interneta u obliku koji je ugodan za oči i koji se može široko širiti. Nema sumnje da ste surfali internetom i vidjeli druge stranice, a sada vjerojatno znate da su strašni akronimi poput "HTTP" i "HTML" jednostavno skraćenica za "web" i "način na koji se informacije izražavaju na internetu". Možda već imate iskustva s predstavljanjem informacija na internetu.

Internet se pokazao kao idealan medij za distribuciju informacija, što se može vidjeti iz njegove ogromne popularnosti i širokog razvoja. Iako neki dovode u pitanje korisnost interneta i njegovu široku raširenost i popularnost uglavnom pripisuju nametljivom oglašavanju, internet je neosporno važan medij za prezentiranje svih vrsta informacija. Ne samo da postoje mnoge usluge za pružanje najnovijih informacija (vijesti, vremenska prognoza, sportski događaji uživo) i referentnih materijala u elektroničkom obliku, nude se i značajne količine drugih vrsta podataka. Porezna uprava, koja je distribuirala sve svoje obrasce za povrat poreza iz 1995. godine i druge informacije putem World Wide Weba, nedavno je priznala da je primila poštu obožavatelja za svoju web stranicu. Tko bi rekao da će porezna uprava ikada primati poštu obožavatelja? To nije bilo zato što je njegova stranica bila dobro dizajnirana, već zato što se pokazala doista korisnim alatom za tisuće, možda milijune ljudi.

Što web čini jedinstvenim i tako atraktivnim informacijskim servisom? Prije svega, pruža hipermedijsko sučelje za podatke. Razmislite o tvrdom disku vašeg računala. Obično se podaci izražavaju linearno, slično sustavu datoteka. Na primjer, imate više mapa, a unutar svake mape nalaze se dokumenti ili druge mape. Web koristi drugačiju paradigmu za izražavanje informacija koja se naziva hipermedija. Hipertekstualno sučelje sastoji se od dokumenta i poveznica. Veze su riječi na koje se klikne da bi se vidjeli drugi dokumenti ili pronašle druge vrste informacija. Web proširuje koncept hiperteksta na druge vrste medija, kao što su grafika, zvukovi, video (otuda i naziv "hipermedija"). Odabir teksta ili grafike na dokumentu omogućuje vam da vidite povezane informacije o odabranoj stavci u bilo kojem broju oblika.

Gotovo svi mogu imati koristi od ovog jednostavnog i jedinstvenog načina prezentiranja i distribucije informacija, od akademika koji žele odmah koristiti podatke sa svojim kolegama do poslovnih ljudi koji dijele informacije o svojoj tvrtki sa svima. No, iako je davanje informacija izuzetno važno, u posljednjih nekoliko godina mnogi smatraju da je primanje informacija jednako važan proces.

Iako Web nudi jedinstveno hipermedijsko sučelje za informacije, postoje mnoga druga učinkovite načine distribucija podataka. Na primjer, mrežne usluge kao što su File Transfer Protocol (FTP) i Gopher news grupa postojale su puno prije World Wide Weba. Elektronička pošta bila je primarni medij za komunikaciju i razmjenu informacija na Internetu i većini drugih mreža gotovo od samih početaka ovih mreža. Zašto je Internet postao tako popularan način distribucije informacija? Multimedijski aspekt Interneta značajno je pridonio njegovom uspjehu bez presedana, ali da bi Internet bio najučinkovitiji, mora biti interaktivan.

Bez mogućnosti primanja korisničkog unosa i pružanja informacija, Web bi bio potpuno statična okolina. Podaci bi bili dostupni samo u formatu koji je odredio autor. To bi potkopalo jednu od sposobnosti računalstva općenito: interaktivne informacije. Na primjer, umjesto da tjeramo korisnika da gleda više dokumenata kao da pregledava knjigu ili rječnik, bilo bi bolje dopustiti korisniku da identificira ključne riječi o temi od interesa. Korisnici mogu prilagoditi prezentaciju podataka umjesto da se oslanjaju na krutu strukturu koju definira davatelj sadržaja.

Izraz "web poslužitelj" može dovesti u zabludu jer se može odnositi i na fizički stroj i na softver koji koristi za komunikaciju s internetskim preglednicima. Kada preglednik zatraži danu web-adresu, prvo se povezuje sa strojem putem interneta, šaljući softveru web-poslužitelja zahtjev za dokumentom. Ovaj softver radi kontinuirano, čekajući da takvi zahtjevi stignu i na njih odgovara.

Iako poslužitelji mogu slati i primati podatke, sam poslužitelj funkcionalnost ograničeno. Na primjer, najprimitivniji poslužitelj može samo poslati traženu datoteku pregledniku. Poslužitelj obično ne zna što učiniti s ovim ili onim dodatnim unosom. Ako ISP ne kaže poslužitelju kako da rukuje ovim dodatnim informacijama, poslužitelj će najvjerojatnije zanemariti unos.

Kako bi poslužitelj mogao obavljati i druge operacije osim pretraživanja i slanja datoteka u internetski preglednik, potrebno je znati proširiti funkcionalnost poslužitelja. Na primjer, web poslužitelj ne može pretraživati ​​bazu podataka na temelju ključne riječi koju je unio korisnik i vratiti više podudarnih dokumenata osim ako je takva mogućnost na neki način programirana u poslužitelju.

Što je CGI?

Common Gateway Interface (CGI) je sučelje za poslužitelj koje vam omogućuje proširenje funkcionalnosti poslužitelja. Koristeći CGI, možete interaktivno komunicirati s korisnicima koji pristupaju vašoj stranici. Na teoretskoj razini, CGI omogućuje poslužitelju da može analizirati (interpretirati) unos iz preglednika i vratiti informacije na temelju unosa korisnika. Na praktičnoj razini, CGI je sučelje koje omogućuje programeru pisanje programa koji lako komuniciraju s poslužiteljem.

U pravilu, da biste proširili mogućnosti poslužitelja, morali biste sami modificirati poslužitelj. Ovo rješenje je nepoželjno jer zahtijeva razumijevanje nižeg sloja mrežnog programiranja internetskog protokola. Ovo bi također zahtijevalo uređivanje i ponovno kompajliranje izvornog koda poslužitelja ili pisanje prilagođenog poslužitelja za svaki zadatak. Recimo da želite proširiti mogućnosti poslužitelja tako da djeluje kao pristupnik s weba na e-poštu, uzimajući podatke koje unese korisnik iz preglednika i šaljući ih e-pošta drugom korisniku. Poslužitelj bi morao umetnuti kod za analizu unosa iz preglednika, proslijediti ga e-poštom drugom korisniku i proslijediti odgovor natrag u preglednik preko mrežne veze.

Prvo, takav zadatak zahtijeva pristup kodu poslužitelja, što nije uvijek moguće.

Drugo, teško je i zahtijeva veliko tehničko znanje.

Treće, ovo se odnosi samo na određeni poslužitelj. Ako trebate premjestiti svoj poslužitelj na drugu platformu, morat ćete pokrenuti ili barem potrošiti dosta vremena na prijenos koda na tu platformu.

Zašto CGI?

CGI nudi prijenosno i jednostavno rješenje za ove probleme. CGI protokol definira standardni način kako bi programi kontaktirali web poslužitelj. Bez ikakvog posebnog znanja, možete napisati program na bilo kojem strojnom jeziku koji ima sučelje i komunicira s web poslužiteljem. Ovaj program će raditi sa svim web poslužiteljima koji razumiju CGI protokol.

CGI komunikacija se odvija korištenjem standardnog ulaza i izlaza, što znači da ako znate kako ispisivati ​​i čitati podatke koristeći svoj programski jezik, možete napisati aplikaciju web poslužitelja. Osim parsiranja ulaza i izlaza, programiranje CGI aplikacija gotovo je jednako programiranju bilo koje druge aplikacije. Na primjer, za programiranje programa "Hello, World!" koristite funkcije ispisa vašeg jezika i format definiran za CGI programe za ispis odgovarajuće poruke.

Odabir programskog jezika

Budući da je CGI univerzalno sučelje, niste ograničeni niti na jedan određeni strojni jezik. Važno pitanje koje se često postavlja je: koji se programski jezici mogu koristiti za CGI programiranje? Možete koristiti bilo koji jezik koji vam omogućuje sljedeće:

  • Ispis na standardni izlaz
  • Čitanje sa standardnog ulaza
  • Čitajte iz promjenjivih načina

Gotovo svi programski jezici i mnogi skriptni jezici rade ove tri stvari, a možete koristiti bilo koju od njih.

Jezici spadaju u jednu od sljedeće dvije klase: prevedeni i tumačeni. Prevedeni jezik kao što je C ili C++ obično je manji i brži, dok interpretirani jezici kao što su Perl ili Rexx ponekad zahtijevaju učitavanje velikog tumača pri pokretanju. Osim toga, možete distribuirati binarne kodove (kod koji se prevodi u strojni jezik) bez izvornog koda ako se vaš jezik može prevoditi. Distribucija interpretabilnih skripti obično znači distribuciju izvornog koda.

Prije nego što odaberete jezik, prvo morate razmotriti svoje prioritete. Morate odvagnuti prednosti brzine i učinkovitosti jednog programskog jezika u odnosu na lakoću programiranja drugog. Ako imate želju naučiti neki drugi jezik, umjesto da koristite onaj koji već znate, pažljivo odvagnite prednosti i nedostatke oba jezika.

Dva najčešće korištena jezika za CGI programiranje su C i Perl (oba su obrađena u ovoj knjizi). Oba imaju jasne prednosti i nedostatke. Perl je vrlo visoka razina, a ujedno i snažan jezik, posebno pogodan za raščlanjivanje tekst. Iako ga jednostavnost korištenja, fleksibilnost i snaga čine atraktivnim jezikom za CGI programiranje, njegova relativno velika veličina i sporiji rad ponekad ga čine neprikladnim za neke aplikacije. C programi su manji, učinkovitiji i pružaju kontrolu sustava niže razine, ali su složeniji za programiranje, nemaju lagane ugrađene rutine za obradu teksta i teže ih je ispravljati.

Koji je jezik najprikladniji za CGI programiranje? Onaj koji smatrate prikladnijim s programskog gledišta. Oba su jednako učinkovita za programiranje CGI aplikacija, a s odgovarajućim bibliotekama oba imaju slične mogućnosti. Međutim, ako imate teško dostupan poslužitelj, možete koristiti manje, prevedene C programe. Ako trebate brzo napisati aplikaciju koja zahtijeva puno rada na obradi teksta, možete koristiti Perl.

Opomene

Postoje neke važne alternative CGI aplikacijama. Mnogi poslužitelji sada uključuju API programiranje, što olakšava programiranje izravnih proširenja poslužitelja za razliku od samostalnih CGI aplikacija. API poslužitelji općenito su učinkovitiji od CGI programa. Ostali poslužitelji uključuju ugrađenu funkcionalnost koja može rukovati posebnim ne-CGI elementima, kao što je povezivanje baze podataka. Konačno, nekim aplikacijama mogu upravljati neke nove tehnologije na strani klijenta (umjesto na strani poslužitelja) poput Jave. Uz tako brze promjene u tehnologiji, hoće li CGI brzo zastarjeti?

Jedva. CGI ima nekoliko prednosti u odnosu na novije tehnologije.

  • Svestran je i prenosiv. Možete napisati CGI aplikaciju koristeći gotovo bilo koji programski jezik na bilo kojoj platformi. Neke od alternativa, kao što je API poslužitelja, ograničavaju vas na određene jezike i puno ih je teže naučiti.
  • Malo je vjerojatno da će tehnologije na strani klijenta, kao što je Java, zamijeniti CGI, jer postoje neke aplikacije za čije su izvršavanje aplikacije na strani poslužitelja puno bolje prilagođene.
  • Mnoga ograničenja CGI-ja su ograničenja HTML-a ili HTTP-a. Kako se internetski standardi u cjelini razvijaju, tako se razvijaju i CGI mogućnosti.

Sažetak

Common Gateway Interface je protokol kojim programi komuniciraju s web poslužiteljima. Svestranost CGI-ja daje programerima mogućnost pisanja gateway programa na gotovo svim jezicima, iako postoje mnogi kompromisi povezani s različitim jezicima. Bez ove mogućnosti, stvaranje interaktivnih web stranica bilo bi teško, u najboljem slučaju zahtijevalo bi izmjene poslužitelja, a interaktivnost bi bila nedostupna većini korisnika koji nisu administratori stranice.

Poglavlje 2: Osnove

Prije nekoliko godina napravio sam stranicu za koledž na Harvardu gdje su ljudi mogli slati komentare o njima. U to je vrijeme Internet bio mlad, a dokumentacije je bilo malo. Ja sam se, kao i mnogi drugi, oslanjao na kratku dokumentaciju i programske sustave koje su stvorili drugi kako bih se naučio CGI programiranju. Iako je ova metoda proučavanja zahtijevala malo pretraživanja, mnogo eksperimenata i stvarala mnoga pitanja, bila je vrlo učinkovita. Ovo je poglavlje rezultat mog ranog rada s CGI-jem (naravno, uz nekoliko izmjena).

Iako je potrebno neko vrijeme za potpuno razumijevanje i svladavanje zajedničkog sučelja pristupnika, sam protokol je prilično jednostavan. Svatko tko ima neke osnovne vještine programiranja i upoznat je s webom može brzo naučiti programirati prilično složene CGI aplikacije baš kao što smo ja i drugi naučili raditi prije nekoliko godina.

Svrha ovog poglavlja je predstaviti osnove CGI-ja na sveobuhvatan, iako sažet način. Svaki koncept koji se ovdje razmatra detaljno je predstavljen u narednim poglavljima. Međutim, nakon što završite ovo poglavlje, možete odmah početi programirati CGI aplikacije. Kada dosegnete ovu razinu, možete naučiti zamršenosti CGI-ja, bilo čitanjem ostatka ove knjige ili jednostavno eksperimentiranjem na vlastitoj koži.

CGI programiranje možete svesti na dva zadatka: primanje informacija iz web preglednika i slanje informacija natrag u preglednik. To se radi prilično intuitivno nakon što se upoznate s normalnom upotrebom CGI aplikacija. Često se od korisnika traži da ispuni neki obrazac, na primjer, unese svoje ime. Nakon što korisnik ispuni obrazac i pritisne Enter, ove informacije se šalju CGI programu. CGI program zatim mora pretvoriti te informacije u nešto što razumije, obraditi ih u skladu s tim i poslati ih natrag u preglednik, bilo da se radi o jednostavnoj potvrdi ili rezultatu pretraživanja u višenamjenskoj bazi podataka.

Drugim riječima, programiranje CGI-ja zahtijeva razumijevanje kako primiti unos iz internetskog preglednika i kako poslati izlaz natrag. Što se događa između ulazne i izlazne faze CGI programa ovisi o cilju programera. Uvidjet ćete da glavna poteškoća u CGI programiranju leži u ovoj međufazi; Jednom kada naučite kako raditi s ulazom i izlazom, to je u biti dovoljno da postanete CGI programer.

U ovom ćete poglavlju naučiti principe koji stoje iza CGI ulaza i izlaza, kao i druge osnovne vještine koje će vam trebati za pisanje i korištenje CGI-ja, uključujući stvari poput stvaranja HTML obrazaca i imenovanja vaših CGI programa. Ovo poglavlje pokriva sljedeće teme:

  • Tradicionalni program „Zdravo, svijete!“;
  • CGI izlaz: Slanje informacija natrag za prikaz u internetskom pregledniku;
  • Konfiguriranje, instaliranje i pokretanje aplikacije. Naučit ćete o različitim web platformama i poslužiteljima;
  • CGI unos: Tumačenje informacija koje šalje web preglednik. Uvod u neke korisne programske biblioteke za raščlanjivanje takvog unosa;
  • Jednostavan primjer: pokriva sve lekcije u određenom poglavlju;
  • Strategija programiranja.

Zbog prirode ovog poglavlja, samo se lagano dotičem nekih tema. Ne brinite; Sve su ove teme detaljnije obrađene u drugim poglavljima.

Pozdrav svijete!

Počinjete s tradicionalnim problemom uvodnog programiranja. Napisat ćete program koji prikazuje "Hello, World!" na vašem web pregledniku. Prije nego napišete ovaj program, morate razumjeti koje informacije web preglednik očekuje primiti od CGI programa. Također morate znati kako pokrenuti ovaj program kako biste ga mogli vidjeti na djelu.

CGI je neovisan o jeziku, tako da ovaj program možete implementirati na bilo kojem jeziku. Ovdje se koristi nekoliko različitih jezika kako bi se pokazala neovisnost svakog jezika. U Perlu, program "Hello, World!" prikazano u ispisu 2.1.

Listing 2.1. Pozdrav svijete! u Perlu. #!/usr/local/bin/perl # Hello.cgi - Moj prvi CGI program print "Content-Type: text/html\n\n"; ispis" \n"; ispis " Pozdrav svijete!"; ispis "\n"; ispis " \n"; ispis "

Pozdrav svijete!

\n"; ispis " \n";

Spremite ovaj program kao hello.cgi i instalirajte ga na odgovarajuće mjesto. (Ako niste sigurni gdje je, ne brinite; saznat ćete u odjeljku "Instaliranje i pokretanje CGI programa" kasnije u ovom poglavlju.) Za većinu poslužitelja, direktorij koji vam je potreban je cgi-bin . Sada pozovite program iz svog web preglednika. Za većinu to znači otvaranje sljedećeg jedinstvenog lokatora izvora (URL):

http://hostname/directoryname/hello.cgi

Hostname je naziv vašeg web poslužitelja, a directoryname je direktorij u koji ste stavili hello.cgi (vjerojatno cgi-bin).

Razdvajanje hello.cgi

Treba napomenuti nekoliko stvari o hello.cgi.

Prvo, koristite jednostavne naredbe za ispis. CGI programi ne zahtijevaju nikakve posebne deskriptore datoteka ili izlazne deskriptore. Da biste poslali izlaz u preglednik, jednostavno ispišite na stdout.

Drugo, imajte na umu da se sadržaj prve naredbe za ispis (Content-Type: text/html) ne pojavljuje u vašem web pregledniku. Pregledniku možete poslati bilo koju informaciju koju želite (HTML stranicu, grafiku ili zvuk), ali prvo morate pregledniku reći kakvu vrstu podataka šaljete. Ovaj redak govori pregledniku kakvu informaciju može očekivati ​​- u ovom slučaju HTML stranicu.

Treće, program se zove hello.cgi. Ne morate uvijek koristiti ekstenziju .cgi uz naziv svog CGI programa. Iako izvorni kod za mnoge jezike također koristi ekstenziju .cgi, ona se ne koristi za označavanje vrste jezika, već je način na koji poslužitelj identificira datoteku kao izvršnu datoteku, a ne kao grafičku datoteku, HTML datoteku ili tekstualna datoteka. Poslužitelji su često konfigurirani da pokušaju izvršiti samo one datoteke koje imaju ovaj nastavak, prikazujući sadržaj svih ostalih. Iako upotreba ekstenzije .cgi nije obavezna, ipak se smatra dobrom praksom.

Općenito, hello.cgi se sastoji od dva glavna dijela:

  • govori pregledniku koje informacije može očekivati ​​(Content-Type: text/html)
  • govori pregledniku što treba prikazati (Hello, World!)

Pozdrav svijete! u C

Kako bi se pokazala jezična neovisnost CGI programa, ispis 2.2 prikazuje ekvivalent programa hello.cgi napisanog u C-u.

Listing 2.2. Pozdrav svijete! u C. /* hello.cgi.c - Zdravo, svijete CGI */ #include int main() ( printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Pozdrav svijete!\n"); printf("\n"); printf(" \n"); printf("

Pozdrav svijete!

\n"); printf(" \n"); )

Bilješka

Imajte na umu da Perl verzija hello.cgi koristi Content-Type print ": text/html\n\n "; Dok verzija C koristi Printf("Content-Type: text/html\r\n\r\n");

Zašto Perl ispisuje operator koji završava s dva nova retka (\n), dok C printf završava s dva znaka za početak i novim retkom (\r\n)?

Tehnički, očekuje se da će zaglavlja (svi ispisi prije praznog retka) biti odvojena povratnim znakovima i novim redcima. Nažalost, na DOS i Windows strojevima, Perl prevodi \r kao još jedan novi red, a ne kao povratak na novi red.

Iako je Perl-ova iznimka \rs tehnički neispravna, radit će na gotovo svim protokolima i jednako je prenosiva na svim platformama. Stoga, u svim Perl primjerima u ovoj knjizi, koristim zaglavlja za odvajanje novog retka, a ne povratak na prvi redak i novi redak.

Odgovarajuće rješenje za ovaj problem predstavljeno je u 4. poglavlju, Zaključak.

Ni web poslužitelj ni preglednik ne mare koji se jezik koristi za pisanje programa. Iako svaki jezik ima prednosti i nedostatke kao CGI programski jezik, najbolje je koristiti jezik s kojim vam je najudobnije raditi. (O izboru programskog jezika detaljnije se govori u 1. poglavlju, “Zajedničko sučelje pristupnika (CGI)”).

CGI renderiranje

Sada možete pobliže pogledati pitanje slanja informacija web pregledniku. Iz primjera "Hello, World!" možete vidjeti da web-preglednici očekuju dva skupa podataka: zaglavlje, koje sadrži informacije kao što su informacije za prikaz (npr. Content-Type: line) i stvarne informacije (što web-preglednik prikazuje). Ove dvije informacije odvojene su praznim redom.

Zaglavlje se naziva HTTP zaglavlje. Daje važne informacije o informacijama koje će preglednik primiti. Ima ih nekoliko različite vrste HTTP zaglavlja, a najuniverzalnije je ono koje ste prije koristili: Content-Type: zaglavlje. Možete koristiti različite kombinacije HTTP zaglavlja, odvojenih znakovima za početak i novim redcima (\r\n). Prazan redak koji odvaja zaglavlje od podataka također se sastoji od povratnog reda i novog retka (zašto su oba potrebna ukratko je objašnjeno u prethodnoj bilješci i detaljno objašnjeno u 4. poglavlju). O drugim HTTP zaglavljima naučit ćete u 4. poglavlju; Trenutno imate posla s Content-Type: zaglavljem.

Content-Type: Zaglavlje opisuje vrstu podataka koje CGI vraća. Odgovarajući format za ovo zaglavlje je:

Content-Type: podvrsta/vrsta

Gdje je podtip/tip ispravan tip višenamjenskih proširenja internetske pošte (MIME). Najčešći MIME tip je HTML tip: text/html. Tablica 2.1 navodi još nekoliko uobičajenih MIME vrsta o kojima će biti riječi; Potpuniji popis i analiza MIME tipova nalazi se u 4. poglavlju.

Bilješka

MIME je izvorno izmišljen za opisivanje sadržaja tijela elektroničke pošte. Postao je prilično uobičajen način predstavljanja informacija tipa sadržaja. Više o MIME-u možete pročitati u RFC1521. RFC-ovi na Internetu predstavljaju zahtjeve za komentare, koji su sažeci odluka koje su donijele grupe na Internetu koje pokušavaju postaviti standarde. Rezultate RFC1521 možete vidjeti na sljedećoj adresi: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tablica 2.1. Neki uobičajeni MIME tipovi. MIME Tip Opis Tekst/html Hypertext Markup Language (HTML) Tekst/običan tekstualne datoteke Slika/gif Grafičke datoteke GIF Slika/jpeg Komprimirane grafičke datoteke JPEG Audio/osnovne audio datoteke Sun *.au Audio/x-wav Windows datoteke *

Nakon zaglavlja i prazne linije jednostavno ispisujete podatke u obliku koji vam je potreban. Ako šaljete HTML, ispišite HTML oznake i podatke u stdout nakon zaglavlja. Također možete poslati grafiku, zvuk i druge binarne datoteke jednostavnim ispisom sadržaja datoteke u stdout. Nekoliko primjera za to dano je u poglavlju 4.

Instaliranje i pokretanje CGI programa

Ovaj odjeljak donekle odstupa od CGI programiranja i govori o konfiguriranju vašeg web poslužitelja za korištenje CGI, instaliranju i pokretanju programa. Bit ćete upoznati s različitim poslužiteljima za različite platforme s više ili manje detalja, ali ćete morati dublje kopati po dokumentaciji vašeg poslužitelja kako biste pronašli najbolju opciju.

Svi poslužitelji zahtijevaju prostor za datoteke poslužitelja i prostor za HTML dokumente. U ovoj se knjizi područje poslužitelja naziva ServerRoot, a područje dokumenta naziva se DocumentRoot. Na UNIX strojevima, ServerRoot je obično u /usr/local/etc/httpd/, a DocumentRoot je obično u /usr/local/etc/httpd/htdocs/. Međutim, to neće učiniti nikakvu razliku za vaš sustav, stoga zamijenite sve reference na ServerRoot i DocumentRoot svojim vlastitim ServerRoot i DocumentRoot.

Kada pristupate datotekama koristeći svoj web preglednik, navodite datoteku u URL-u u odnosu na DocumentRoot. Na primjer, ako je adresa vašeg poslužitelja mymachine.org, tada ovoj datoteci pristupate sa sljedećim URL-om: http://mymachine.org/index.html

Konfiguriranje poslužitelja za CGI

Većina web-poslužitelja unaprijed je konfigurirana za dopuštanje korištenja CGI programa. Tipično dva parametra pokazuju poslužitelju je li datoteka CGI aplikacija ili nije:

  • Određeni imenik. Neki poslužitelji vam omogućuju da odredite da su sve datoteke u određenom direktoriju (koji se prema zadanim postavkama obično naziva cgi-bin) CGI.
  • Ekstenzije naziva datoteka. Mnogi poslužitelji imaju ovu pretkonfiguraciju koja omogućuje definiranje svih datoteka koje završavaju na .cgi kao CGI.

Metoda označenog direktorija nešto je kao relikt prošlosti (prvi poslužitelji koristili su je kao jedinu metodu za utvrđivanje koje su datoteke CGI programi), ali ima nekoliko prednosti.

  • Održava CGI programe centraliziranim, sprječavajući da drugi direktoriji postanu pretrpani.
  • Niste ograničeni nijednom određenom ekstenzijom naziva datoteke, pa svoje datoteke možete imenovati kako god želite. Neki poslužitelji vam omogućuju da odredite nekoliko različitih direktorija kao CGI direktorije.
  • Također vam daje veću kontrolu nad time tko može snimati CGI. Na primjer, ako imate poslužitelj i podržavate sustav s više korisnika i ne želite da oni koriste vlastite CGI skripte bez prethodne revizije programa iz sigurnosnih razloga, možete označiti samo te datoteke u ograničenom, centraliziranom direktoriju kao CGI . Korisnici će vam tada morati dati CGI programe za instalaciju, a vi možete prvo pregledati kod kako biste bili sigurni da program nema većih sigurnosnih problema.

CGI notacija putem ekstenzije naziva datoteke može biti korisna zbog svoje fleksibilnosti. Niste ograničeni na jedan direktorij za CGI programe. Većina poslužitelja može se konfigurirati da prepoznaju CGI preko ekstenzije naziva datoteke, iako nisu svi konfigurirani na ovaj način prema zadanim postavkama.

Upozorenje

Ne zaboravite na važnost sigurnosnih pitanja kada konfigurirate svoj poslužitelj za CGI. Neki savjeti će biti obrađeni ovdje, a Poglavlje 9, Zaštita CGI-ja, pokriva te aspekte detaljnije.

Instalacija CGI na UNIX poslužiteljima

Bez obzira na to kako je vaš UNIX poslužitelj konfiguriran, postoji nekoliko koraka koje morate poduzeti kako biste osigurali da vaše CGI aplikacije rade kako se očekuje. Vaš web poslužitelj obično radi kao nepostojeći korisnik (tj. UNIX korisnik nitko - Račun, koji nema prava pristupa datoteci i ne može se registrirati). CGI skripte (napisane u Perlu, Bourneovoj ljusci ili nekom drugom skriptnom jeziku) moraju biti izvršne i čitljive u cijelom svijetu.

Trag

Kako bi vaše datoteke bile čitljive i izvršne, upotrijebite sljedeću naredbu UNIX dopuštenja: chmod 755 naziv datoteke.

Ako koristite skriptni jezik kao što je Perl ili Tcl, navedite punu stazu svog tumača u prvom retku svoje skripte. Na primjer, Perl skripta koja koristi perl u direktoriju /usr/local/bin započela bi sljedećim redom:

#!/usr/local/bin/perl

Upozorenje

Nikada nemojte postavljati prevoditelj (perl ili Tcl Wish binarni) u direktorij /cgi-bin. Ovo stvara sigurnosni rizik za vaš sustav. O tome se detaljnije govori u poglavlju 9.

Neki generički UNIX poslužitelji

NCSA i Apache poslužitelji imaju slične konfiguracijske datoteke jer se Apache poslužitelj izvorno temeljio na NCSA kodu. Prema zadanim postavkama, oni su konfigurirani tako da je svaka datoteka u direktoriju cgi-bin (koji se prema zadanim postavkama nalazi u ServerRoot-u) CGI program. Za promjenu lokacije direktorija cgi-bin, možete urediti konfiguracijsku datoteku conf/srm.conf. Format za konfiguriranje ovog imenika je

ScriptAlias ​​​​fakedirectoryname realdirectoryname

gdje je fakedirectoryname pseudo ime direktorija (/cgi-bin), a realdirectoryname puna staza gdje su CGI programi zapravo pohranjeni. Možete konfigurirati više od jednog ScriptAlias ​​​​dodavanjem više ScriptAlias ​​​​retaka.

Zadana konfiguracija dovoljna je za potrebe većine korisnika. Morate urediti redak u srm.conf datoteci u oba slučaja kako biste odredili ispravan realdirectoryname. Ako se, na primjer, vaši CGI programi nalaze u /usr/local/etc/httpd/cgi-bin, redak ScriptAlias ​​​​u vašoj srm.conf datoteci trebao bi biti nešto poput ovoga:

ScriptAlias ​​/cgi-bin/ /usr/local/etc/httpd/cgi-bin/

Za pristup ili povezivanje s CGI programima koji se nalaze u ovom direktoriju, koristite sljedeći URL:

Http://hostname/cgi-bin/programname

Gdje je hostname naziv hosta vašeg web poslužitelja, a programname je naziv vašeg CGI.

Na primjer, recimo da kopirate program hello.cgi u svoj direktorij cgi-bin (npr. /usr/local/etc/httpd/cgi-bin) na vašem web poslužitelju pod nazivom www.company.com. Za pristup svom CGI-ju koristite sljedeći URL: http://www.company.com/cgi-bin/hello.cgi

Ako želite konfigurirati svoj NCSA ili Apache poslužitelj da prepozna bilo koju datoteku s nastavkom .cgi kao CGI, trebate urediti dvije konfiguracijske datoteke. Prvo, u datoteci srm.conf uklonite komentare iz sljedećeg retka:

AddType aplikacija/x-httpd-cgi .cgi

Ovo će povezati CGI tipa MIME s ekstenzijom .cgi. Sada moramo promijeniti datoteku access.conf tako da možemo pokrenuti CGI u bilo kojem direktoriju. Da biste to učinili, dodajte opciju ExecCGI u liniju Opcija. Izgledat će otprilike kao sljedeći redak:

Indeksi opcija FollowSymLinks ExecCGI

Sada se svaka datoteka s nastavkom .cgi smatra CGI; pristupite mu kao bilo kojoj datoteci na svom poslužitelju.

CERN poslužitelj je konfiguriran na isti način kao Apache i NCSA poslužitelji. Umjesto ScriptAlias, CERN poslužitelj koristi naredbu Exec. Na primjer, u datoteci httpd.conf vidjet ćete sljedeći redak:

Exec /cgi-bin/* /usr/local/etc/httpd/cgi-bin/*

Ostali UNIX poslužitelji mogu se konfigurirati na isti način; To je detaljnije opisano u dokumentaciji poslužitelja.

Instalacija CGI na Windows

Većina poslužitelja dostupnih za Windows 3.1, Windows 95 i Windows NT konfigurirana je pomoću metode "nastavka naziva datoteke" za CGI prepoznavanje. Općenito, promjena konfiguracije poslužitelja temeljenog na sustavu Windows jednostavno zahtijeva pokretanje programa za konfiguraciju poslužitelja i unošenje odgovarajućih promjena.

Ponekad može biti teško konfigurirati poslužitelj za ispravno pokretanje skripte (kao što je Perl). U DOS-u ili Windowsu nećete moći navesti tumača u prvom retku skripte, kao što je slučaj s UNIX-om. Neki poslužitelji imaju unaprijed definiranu konfiguraciju za povezivanje određenih ekstenzija naziva datoteka s tumačem. Na primjer, mnogi Windows web poslužitelji pretpostavljaju da su datoteke koje završavaju na .pl Perl skripte.

Ako poslužitelj ne izvodi ovu vrstu pridruživanja datoteka, možete definirati batch datoteku paketera koja poziva i tumača i skriptu. Kao i kod UNIX poslužitelja, nemojte instalirati tumač ni u direktorij cgi-bin niti u bilo koji direktorij dostupan s weba.

Instaliranje CGI na Macintosh

Dvije najpoznatije opcije poslužitelja za Macintosh su WebStar StarNine i njegov prethodnik MacHTTP. Oba prepoznaju CGI po ekstenziji naziva datoteke.

MacHTTP razumije dvije različite ekstenzije: .cgi i .acgi, što je kratica za asinkroni CGI. Uobičajeni CGI programi instalirani na Macintosh (s ekstenzijom .cgi) držat će web poslužitelj u zauzetom stanju dok CGI ne završi s radom, uzrokujući da poslužitelj obustavi sve druge zahtjeve. Asinkroni CGI, s druge strane, omogućuje poslužitelju prihvaćanje zahtjeva čak i dok radi.

CGI Macintosh programer koji koristi bilo koji od ovih web poslužitelja trebao bi, ako je moguće, koristiti samo ekstenziju .acgi umjesto ekstenzije .cgi. Trebao bi raditi s većinom CGI programa; ako ne radi, preimenujte program u .cgi.

Izvršavanje CGI

Nakon što ste instalirali CGI, postoji nekoliko načina da ga izvršite. Ako je vaš CGI program samo izlazni program, kao što je program Hello,World!, tada ga možete izvršiti jednostavnim pristupom njegovom URL-u.

Većina programa radi kao poslužiteljska aplikacija na HTML obrascu. Prije nego naučite kako dobiti informacije iz ovih obrazaca, prvo pročitajte kratki uvod o stvaranju takvih obrazaca.

Brzi vodič o HTML obrascima

Dvije najvažnije oznake u HTML obliku su

I . Možete stvoriti većinu HTML obrazaca koristeći samo ove dvije oznake. U ovom ćete poglavlju istražiti te oznake i mali podskup mogućih tipova ili atributa. . Kompletan vodič a poveznica na HTML obrasce nalazi se u poglavlju 3, HTML i obrasci.

Označiti

Označiti koristi se za određivanje koji dio HTML datoteke treba koristiti za podatke koje unese korisnik. Ovo se odnosi na način na koji većina HTML stranica naziva CGI program. Atributi oznake određuju naziv i lokaciju programa - bilo lokalno ili kao puni URL, vrstu korištenog kodiranja i metodu kretanja podataka koju koristi program.

Sljedeći red prikazuje specifikacije za oznaku :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

Atribut ENCTYPE nema posebnu ulogu i obično nije uključen u oznaku . detaljne informacije u vezi s oznakom ENCTYPE dano je u 3. poglavlju. Jedan način korištenja ENCTYPE-a prikazan je u 14. poglavlju, "Proširenja marke".

Atribut ACTION odnosi se na URL CGI programa. Nakon što korisnik ispuni obrazac i unese podatke, svi podaci se kodiraju i prenose u CGI program. Sam CGI program rješava problem dekodiranja i obrade informacija; O ovom se aspektu raspravlja u "Prihvaćanje unosa iz preglednika", kasnije u ovom poglavlju.

Konačno, atribut METHOD opisuje kako CGI program treba primati ulaz. Dvije metode, GET i POST, razlikuju se u načinu na koji prosljeđuju informacije CGI programu. Oboje se raspravlja u "Prihvaćanje unosa iz preglednika."

Kako bi preglednik omogućio korisnički unos, sve oznake obrazaca i informacije moraju biti okružene oznakom . Ne zaboravite završnu oznaku

za označavanje kraja obrasca. Ne možete imati obrazac unutar obrasca, iako možete postaviti obrazac koji vam omogućuje predstavljanje dijelova informacija na različitim mjestima; o ovom aspektu se opširno raspravlja u 3. poglavlju.

Označiti

Možete stvoriti trake za unos teksta, radio gumbe, potvrdne okvire i druge načine prihvaćanja unosa pomoću oznake . Ovaj odjeljak pokriva samo polja za unos teksta. Za implementaciju ovog polja koristite oznaku sa sljedećim atributima:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

IME je simbolično ime varijable koja sadrži vrijednost koju je unio korisnik. Ako uključite tekst u atribut VRIJEDNOST, taj će tekst biti postavljen kao zadani u polje za unos teksta. Atribut SIZE omogućuje vam da odredite vodoravnu duljinu polja za unos kako će se pojaviti u prozoru preglednika. Konačno, MAXLENGTH definira najveći broj znakova koje korisnik može unijeti u polje. Imajte na umu da atributi VALUE, SIZE, MAXLENGTH nisu obavezni.

Podnošenje obrasca

Ako imate samo jedno tekstualno polje unutar obrasca, korisnik može poslati obrazac jednostavnim upisivanjem informacija na tipkovnici i pritiskom na Enter. U protivnom mora postojati neki drugi način na koji korisnik može prezentirati informacije. Korisnik šalje podatke pomoću gumba za slanje sa sljedećom oznakom:

< Input type=submit >

Ova oznaka stvara gumb Pošalji unutar vašeg obrasca. Kada korisnik završi s ispunjavanjem obrasca, on ili ona može poslati njegov sadržaj na URL naveden atributom ACTION obrasca klikom na gumb Pošalji.

Prihvaćanje unosa iz preglednika

Gore su navedeni primjeri snimanja CGI programa koji šalje informacije s poslužitelja na preglednik. U stvarnosti, CGI program koji ispisuje samo podatke nema mnogo primjena (neki primjeri navedeni su u poglavlju 4). Važnija sposobnost CGI-ja je primanje informacija iz preglednika - značajka koja webu daje njegov interaktivni karakter.

CGI program prima dvije vrste informacija iz preglednika.

  • Prvo, dobiva razne dijelove informacija o pregledniku (njegova vrsta, što može vidjeti, glavno računalo i tako dalje), poslužitelj (njegov naziv i verzija, njegov izvršni port i tako dalje) i CGI programu sebe (naziv programa i gdje se nalazi). Poslužitelj daje sve ove informacije CGI programu kroz varijable okoline.
  • Drugo, CGI program može primiti korisnički unos. Ove informacije, nakon što ih preglednik kodira, šalju se putem varijable okruženja (GET metoda) ili putem standardnog unosa (stdin - POST metoda).

Varijable okoline

Korisno je znati koje su varijable okruženja dostupne CGI programu, i tijekom obuke i za otklanjanje pogrešaka. Tablica 2.2 navodi neke od dostupnih CGI varijabli okoline. Također možete napisati CGI program koji šalje varijable okruženja i njihove vrijednosti u web preglednik.

Tablica 2.2. Neke važne CGI varijable okruženja Varijabla okruženja Svrha REMOTE_ADDR IP adresa klijentskog stroja. REMOTE_HOST Domaćin klijentskog stroja. HTTP _ACCEPT Navodi tipove MIME podataka koje preglednik može interpretirati. HTTP _USER_AGENT Informacije o pregledniku (vrsta preglednika, broj verzije, operativni sustav itd.). REQUEST_METHOD GET ili POST. CONTENT_LENGTH Veličina unosa ako se šalje putem POST-a. Ako nema unosa ili ako se koristi GET metoda, ovaj parametar je nedefiniran. QUERY_STRING Sadrži ulazne informacije kada se prosljeđuju metodom GET. PATH_INFO Omogućuje korisniku da navede put od naredbeni redak CGI (na primjer, http://hostname/cgi-bin/programname/path). PATH_TRANSLATED Prevodi relativnu stazu u PATH_INFO u stvarnu stazu na sustavu.

Da biste napisali CGI aplikaciju koja prikazuje varijable okruženja, morate znati kako učiniti dvije stvari:

  • Definirajte sve varijable okruženja i njihove odgovarajuće vrijednosti.
  • Ispis rezultata u pregledniku.

Zadnju operaciju već znate izvesti. U Perlu su varijable okoline pohranjene u asocijativnom nizu %ENV, koji je uveden imenom varijable okoline. Ispis 2.3 sadrži env.cgi, Perl program koji postiže naš cilj.

Ispis 2.3. Perl program, env.cgi, koji ispisuje sve CGI varijable okoline.

#!/usr/local/bin/perl print "Content-type: text/html\n\n"; ispis" \n"; ispis " CGI okruženje\n"; ispis "\n"; ispis " \n"; ispis "

CGI okruženje

\n"; foreach $env_var (tipke %ENV) ( print " $env_var= $ENV($env_var)
\n"; ) ispis " \n";

Sličan program mogao bi se napisati u C-u; kompletan kod je u ispisu 2.4.

Listing 2.4. Env.cgi.c u C. /* env.cgi.c */ #include extern char **okolina; int main() ( char **p = environ; printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" CGI okruženje\n"); printf("\n"); printf(" \n"); printf("

CGI okruženje

\n"); while(*p != NULL) printf("%s
\n",*p++); printf(" \n"); )

GET ili POST?

Koja je razlika između metoda GET i POST? GET prosljeđuje kodirani ulazni niz kroz QUERY_STRING varijablu okoline, dok ga POST prosljeđuje kroz stdin. POST je preferirana metoda, posebno za obrasce s puno podataka, jer nema ograničenja u količini poslanih informacija, dok je kod GET metode količina medijskog prostora ograničena. GET je, međutim, siguran korisno svojstvo; ovo je detaljno obrađeno u 5. poglavlju, Unos.

Kako bi odredio koja se metoda koristi, CGI program provjerava varijablu okoline REQUEST_METHOD, koja će biti postavljena na GET ili POST. Ako je postavljeno na POST, duljina kodiranih informacija pohranjuje se u varijabli okruženja CONTENT_LENGTH.

Kodirani unos

Kada korisnik pošalje obrazac, preglednik prvo kodira informacije prije nego što ih pošalje poslužitelju, a zatim CGI aplikaciji. Kada koristite oznaku , svako polje dobiva simbolično ime. Vrijednost koju unese korisnik predstavlja se kao vrijednost varijable.

Da bi to utvrdio, preglednik koristi specifikaciju kodiranja URL-a, koja se može opisati na sljedeći način:

  • Različita polja odvaja znakom & (&).
  • Odvaja naziv i vrijednosti znakovima jednakosti (=), pri čemu je naziv s lijeve strane, a vrijednost s desne strane.
  • Zamjenjuje razmake znakovima plus (+).
  • Zamjenjuje sve "nenormalne" znakove znakom postotka (%) iza kojeg slijedi dvoznamenkasti heksadecimalni kod znaka.

Vaš konačni kodirani niz bit će sličan sljedećem:

Ime1=vrijednost1&ime2=vrijednost2&ime3=vrijednost3 ...

Napomena: Specifikacije za URL kodiranje nalaze se u RFC1738.

Na primjer, recimo da ste imali obrazac koji je tražio ime i dob. HTML kod koji je korišten za prikaz ovog obrasca prikazan je u ispisu 2.5.

Listing 2.5. HTML kod za prikaz obrasca za ime i dob.

Ime i dob

Unesite svoje ime:

Unesite svoje godine:

Recimo da korisnik unese Joe Schmoe u polje za ime i 20 u polje za dob. Unos će biti kodiran u ulaznom nizu.

Ime=Joe+Schmoe&dob=20

Raščlanjivanje ulaza

Da bi ove informacije bile korisne, trebate koristiti informacije o nečemu što mogu koristiti vaši CGI programi. Strategije za raščlanjivanje ulaza pokrivene su u 5. poglavlju. U praksi, nikada nećete morati razmišljati o tome kako raščlaniti ulaz, jer je nekoliko stručnjaka već napisalo biblioteke koje rade raščlanjivanje, dostupne svima. Dvije takve biblioteke predstavljene su u ovom poglavlju u sljedećim odjeljcima: cgi -lib.pl za Perl (napisao Steve Brenner) i cgihtml za C (napisao ja).

Opći cilj većine biblioteka napisanih na različitim jezicima je raščlaniti kodirani niz i staviti parove imena i vrijednosti u strukturu podataka. Postoji očita prednost korištenja jezika koji ima ugrađene podatkovne strukture poput Perla; međutim, većina biblioteka za jezike niske razine kao što su C i C++ uključuje strukturu podataka i izvršavanje potprograma.

Nije potrebno postići potpuno razumijevanje knjižnica; važnije je naučiti kako ih koristiti kao alate za olakšavanje posla CGI programera.

Cgi-lib.pl

Cgi-lib.pl koristi Perl asocijativne nizove. Funkcija &ReadParse analizira ulazni niz i unosi svaki par ime/vrijednost po imenu. Na primjer, odgovarajući Perl nizovi potrebni za dekodiranje upravo predstavljenog ulaznog niza "ime/dob" bili bi

&ReadParse(*input);

Sada, da biste vidjeli vrijednost unesenu za "name", možete pristupiti asocijativnom nizu $input("name"). Slično, da biste pristupili vrijednosti "age", trebate pogledati varijablu $input ("age").

Cgihtml

C nema nikakve ugrađene strukture podataka, pa cgihtml implementira vlastiti popis veza za korištenje sa svojim CGI rutinama parsiranja. Ovo definira strukturu tipa unosa na sljedeći način:

Typedef struct ( Char *ime; Char *vrijednost; ) Vrsta unosa;

Za raščlanjivanje ulaznog niza "ime/dob" u C-u pomoću cgihtml-a koristi se sljedeće:

/* deklariramo povezanu listu koja se zove input */ Llist input; /* analiziraj unos i mjesto u povezanom popisu */ read_cgi_input(&input);

Da biste pristupili informacijama o dobi, možete ručno analizirati popis ili koristiti dostupnu funkciju cgi _val().

#uključi #uključi Char *age = malloc(sizeof(char)*strlen(cgi_val(input, "age")) + 1); Strcpy(dob, cgi_val(unos, "dob"));

Vrijednost "dob" sada je pohranjena u nizu godina.

Napomena: Umjesto korištenja jednostavnog niza (kao što je char age ;), ja dinamički dodjeljujem memorijski prostor za string age. Iako ovo otežava programiranje, ipak je važno sa sigurnosne točke gledišta. O tome se detaljnije govori u 9. poglavlju.

Jednostavan CGI program

Napisat ćete CGI program nazvan nameage.cgi koji obrađuje obrazac ime/dob. Obrada podataka (ono što obično nazivam "stvari između") je minimalna. Nameage.cgi jednostavno dekodira unos i prikazuje ime i dob korisnika. Iako nema mnogo koristi od takvog alata, on pokazuje najkritičniji aspekt CGI programiranja: ulaz i izlaz.

Koristite isti obrazac kao gore, pozivajući polja "ime i dob". Nemojte još brinuti o robusnosti i učinkovitosti; riješiti postojeći problem na najjednostavniji način. Rješenja za Perl i C prikazana su u Ispisima 2.6 i 2.7.

Listing 2.6. Nameage.cgi u Perlu

#!/usr/local/bin/perl # nameage.cgi zahtijeva "cgi-lib.pl" &ReadParse(*input); print "Content-Type: text/html\r\n\r\n"; ispis" \n"; ispis " Ime i dob\n"; ispis "\n"; ispis " \n"; print "Pozdrav, " . $input("name") . ". Imate\n"; print $input("age") . " godina.

\n"; ispis " \n";

Listing 2.7. nameage.cgi u C

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( llist input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Ime i dob\n"); printf("\n"); printf(" \n"); printf("Zdravo, %s. Ti si\n",cgi_val(input,"name")); printf("%s godina star.

\n",cgi_val(unos,"dob")); printf(" \n"); )

Imajte na umu da su ova dva programa gotovo jednaka. Oba sadrže rutine parsiranja koje zauzimaju samo jedan redak i obrađuju cijeli ulaz (zahvaljujući odgovarajućim rutinama knjižnice). Rezultat je u biti modificirana verzija vašeg glavnog programa Hello, World!

Pokušajte pokrenuti program ispunjavanjem obrasca i klikom na gumb Pošalji.

Opća strategija programiranja

Sada znate sve osnovne principe potrebne za CGI programiranje. Jednom kada shvatite kako CGI prima informacije i kako ih šalje natrag u preglednik, stvarna kvaliteta vašeg konačnog proizvoda ovisi o vašim općim sposobnostima programiranja. Naime, kada programirate CGI (ili bilo što, što se toga tiče), imajte na umu sljedeće kvalitete:

  • Jednostavnost
  • Učinkovitost
  • Svestranost

Prve dvije kvalitete su prilično uobičajene: pokušajte da vaš kod bude što čitljiviji i učinkovitiji. Svestranost se više odnosi na CGI programe nego na druge aplikacije. Kada počnete razvijati vlastite CGI programe, naučit ćete da postoji nekoliko osnovnih aplikacija koje svatko želi napraviti. Na primjer, jedan od najčešćih i očitih zadataka CGI programa je obrada obrasca i slanje rezultata e-poštom određenom primatelju. Mogli biste obraditi više zasebnih obrazaca, svaki s različitim primateljem. Umjesto pisanja CGI programa za svaki pojedinačni obrazac, možete uštedjeti vrijeme pisanjem općenitijeg CGI programa koji se odnosi na sve obrasce.

Pokrivajući sve osnovne aspekte CGI-ja, pružio sam vam dovoljno informacija da počnete s CGI programiranjem. Međutim, da biste postali učinkovit CGI programer, morate dublje razumjeti kako CGI komunicira s poslužiteljem i preglednikom. Ostatak ove knjige detaljno pokriva probleme koji su ukratko spomenuti u ovom poglavlju, kao i strategiju razvoja aplikacije te prednosti i ograničenja protokola.

Sažetak

Ovo poglavlje ukratko predstavlja osnove CGI programiranja. Izlaz stvarate ispravnim formatiranjem podataka i ispisom u stdout. Primanje CGI unosa malo je složenije jer se mora analizirati prije nego što se može koristiti. Srećom, već postoji nekoliko biblioteka koje izvode raščlanjivanje.

Do sada bi vam trebalo biti prilično ugodno programirati CGI aplikacije. Ostatak ove knjige ide u detalje o specifikacijama, savjetima i strategijama programiranja za naprednije i složenije aplikacije.

2012.: Kupnja British Logice

U lipnju 2012. CGI Group objavila je da je potpisala ugovor o kupnji najvećeg europskog sistem integratora Logica. Iznos transakcije je 2,8 milijardi kanadskih dolara (2,7 milijardi dolara). Kao dio postignutih dogovora, CGI je također pristao preuzeti obveze otplate duga Logice u iznosu od 515 milijuna kanadskih dolara.

Kako bi financirao transakciju, CGI planira prikupiti milijardu kanadskih dolara izdavanjem dodatnih 46,7 milijuna dionica, posuditi 2 milijarde kanadskih dolara od Canadian Imperial Bank of Commerce, National Bank of Canada i The Toronto-Dominion Bank te oko 650 milijuna kanadskih dolara više - unutar trenutne kreditne linije.

Predložena cijena po dionici bila je 59,8% viša od zaključne cijene Logice 30. svibnja 2012. Ugovor predstavlja otprilike 6,6 puta veću zaradu Logice prije kamata, poreza i amortizacije (EBITDA) za 12-mjesečno razdoblje koje je završilo 31. prosinca 2011

Očekuje se da će akvizicija Logice povećati zaradu CGI-ja po dionici za 25% do 30%, isključujući troškove akvizicije i integracije. Kao rezultat spajanja, radna snaga i godišnji prihodi tvrtke bit će više nego dvostruko veći od CGI-ja. Veličina osoblja kombinirane tvrtke bit će oko 72 tisuće zaposlenika smještenih u uredima u 43 zemlje, a godišnji prihod bit će oko 10,4 milijarde kanadskih dolara (9,6 milijardi dolara).

Nova tvrtka bit će šesta najveća među svjetskim IT konzultantima. Najveći od njih su IBM, Accenture, Cap Gemini, Tata Consultancy i Infosys, prema procjenama Reutersa.

"Logica je vodeća tvrtka za poslovne i tehnološke usluge s predanim profesionalcima i pouzdanim, dugoročnim klijentima", rekao je predsjednik i izvršni direktor CGI-ja Michael Roach. "Uvjereni smo da radimo pravu stvar." Kada kupujemo Logicu, mi kupujemo po pravoj cijeni i u pravo vrijeme, stvoriti jednog od nekoliko najvećih neovisnih pružatelja end-to-end tehnoloških usluga."

Upravni odbor CGI-ja jednoglasno je odobrio transakciju. Planirano je da bude dovršen do rujna 2012., nakon dobivanja odobrenja dioničara i slijedeći standardne procedure. Proces integracije tvrtke planira se završiti u roku od 3 godine