Mikä on yleinen yhdyskäytäväliitäntä. Hyväksyy selaimen syötteen. Palvelimen asetukset CGI:lle

Common Gateway Interface (CGI, venäjän yleinen yhdyskäytävän käyttöliittymä) - Tämä standardi menetelmä dynaaminen ohjaus käyttävien verkkosivujen sisältöä erityisiä ohjelmia suoritetaan web-palvelimen puolella. Näitä ohjelmia kutsutaan CGI-käsittelijöiksi tai yhdyskäytäviksi, mutta useammin - CGI-skripteiksi, koska... ne on yleensä kirjoitettu skriptikielillä, pääasiassa Perlillä.

Koska hyperteksti on luonteeltaan staattista, verkkosivu ei voi olla suoraan vuorovaikutuksessa käyttäjän kanssa. Ennen JavaScriptin tuloa ei ollut muuta tapaa vastata käyttäjien toimiin kuin siirtää heidän syöttämänsä tiedot verkkopalvelimelle jatkokäsittelyä varten. CGI:n tapauksessa tämä käsittely suoritetaan käyttämällä ulkoiset ohjelmat ja komentosarjat, joita käytetään standardoidun (katso RFC 3875: CGI-versio 1.1) -liitännän kautta - yhteinen yhdyskäytävä. Yksinkertaistettu malli, joka havainnollistaa CGI:n toimintaa, on esitetty kuvassa. 1.

Miten CGI toimii?

Yleinen algoritmi CGI:n kautta työskentelylle voidaan esittää seuraavasti:

  1. Asiakas pyytää CGI-sovellusta sen URI:n perusteella.
  2. Web-palvelin hyväksyy pyynnön ja asentaa ympäristömuuttujat , jonka kautta tiedot ja palvelutiedot välitetään sovellukseen.
  3. Verkkopalvelin uudelleenohjaa pyynnöt kautta tavallinen stream input (stdin) kutsutun ohjelman tuloon.
  4. CGI-sovellus suorittaa kaikki tarvittavat toiminnot ja luo tulokset HTML-muodossa.
  5. Luotu hyperteksti palautetaan web-palvelimelle vakiotulostusvirran (stdout) kautta. Virheilmoitukset lähetetään stderrin kautta.
  6. Web-palvelin välittää pyynnön tulokset asiakkaalle.

CGI:n sovellukset

Yleisin tehtävä, johon CGI:tä käytetään, on interaktiivisten sivujen luominen, joiden sisältö riippuu käyttäjän toimista. Tyypillisiä esimerkkejä Tällaiset verkkosivut ovat sivuston rekisteröintilomake tai lomake kommentin lähettämistä varten. Toinen CGI:n käyttöalue, joka jää käyttäjien vuorovaikutuksen kulissien taakse, liittyy asiakasta koskevien tietojen keräämiseen ja käsittelyyn: "evästeiden" asettaminen ja lukeminen; Selainta ja käyttöjärjestelmää koskevien tietojen hankkiminen; käyntien määrän laskeminen verkkosivulla; verkkoliikenteen seuranta jne.

Nämä ominaisuudet tarjoavat se, että CGI-komentosarja voidaan yhdistää tietokantaan tai pääsyyn tiedostojärjestelmä palvelin. Näin ollen CGI-skripti voi tallentaa tietoa tietokantataulukoihin tai tiedostoihin ja hakea ne sieltä pyynnöstä, mitä ei voi tehdä HTML:llä.

HUOMAA: CGI ei ole ohjelmointikieli! Se on yksinkertainen protokolla, jonka avulla verkkopalvelin voi siirtää tietoja stdinin kautta ja lukea ne stdoutista. Siksi mikä tahansa palvelinohjelma, joka pystyy toimimaan tavallisten I/O-virtojen kanssa.

Hei maailma!

Esimerkki yksinkertaisesta CGI-komentosarjasta Perlissä on listassa 1. Jos tallennat tämän koodin hello-nimiseen tiedostoon (nimi voi olla mikä tahansa, tunniste voi olla sama), sijoita tiedosto cgi-bin-palvelimen hakemistoon. (tarkemmin sanottuna tuossa web-palvelimen hakemistossa , joka on tarkoitettu CGI-sovelluksille ja joka on määritetty verkkopalvelimen asetuksissa) ja aseta suoritusoikeudet tälle tiedostolle (chmod uo+x hello), niin se tulee saataville osoitteessa kuten http ://palvelinnimi/cgi-bin/hello.

Listaus 1. Esimerkki CGI-skriptistä (Perl)

#!/usr/bin/perl print "Sisältötyyppi: text/html\n\n"; painaa< CGI tervehtii

Hei maailma!



HTML exit;

Tässä koodissa rivi #!/usr/bin/perl määrittää täydellisen polun Perl-tulkkiin. Sisältötyypin rivi: text/html\n\n on http-otsikko, joka määrittää sisällön tyypin (MIME-tyyppi). Kaksoisrivinvaihtomerkki (\n\n) on pakollinen, sillä se erottaa otsikot viestin tekstistä.

Ympäristömuuttujat

Kaikilla CGI-sovelluksilla on pääsy verkkopalvelimen asettamiin ympäristömuuttujiin. Näillä muuttujilla on tärkeä rooli CGI-ohjelmia kirjoitettaessa. Taulukossa on lueteltu joitakin CGI:n käytettävissä olevia muuttujia.

YmpäristömuuttujaKuvaus
CONTENT_TYPE Palvelimelle lähetettyjen tietojen tyyppi. Käytetään, kun asiakas lähettää tietoja, kuten lataa tiedostoa.
CONTENT_LENGTHPyydä sisällön kokoa. Tämä muuttuja on määritetty POST-pyynnöille.
HTTP_COOKIEPalauttaa joukon evästeitä avainarvo-pareina.
HTTP_USER_AGENTKäyttäjäagentin (selaimen) tiedot
PATH_INFOCGI-hakemistopolku
QUERY_STRINGGET-menetelmän välittämä kyselymerkkijono (URL-koodattu).
REMOTE_ADDRPyynnön tehneen asiakkaan IP-osoite.
REMOTE_HOSTAsiakkaan koko nimi (FQDN). (jos saatavilla)
REQUEST_METHODMenetelmä, jolla pyyntö suoritetaan. Useimmiten HANKI tai POSTAA.
SCRIPT_FILENAMETäysi polku pyydettyyn komentosarjaan (palvelimen tiedostojärjestelmässä).
SCRIPT_NAMESkriptin nimi
SERVER_NAMEPalvelimen nimi
PALVELIN_ADDRPalvelimen IP-osoite
SERVER_SOFTWARETietoja palvelinohjelmistoista

Listaus 2 näyttää koodin pienelle Perl-ohjelmalle, joka tulostaa luettelon ympäristömuuttujista. Sen työn tulos näkyy kuvassa. 2.

Listaus 2. Ympäristömuuttujat

#!/usr/bin/perl print "Sisältötyyppi: text/html\n\n"; tulosta" \n \n

Ympäristö

\n"; foreach (lajittelunäppäimet %ENV) ( tulosta " $_: $ENV($_)
\n"; ) tulosta "

\n"; poistu;

Tiedonsiirto: GET-menetelmä

GET-menetelmää käytetään urlenkoodattujen tietojen välittämiseen kyselymerkkijonon kautta. Pyydetyn resurssin osoite (CGI-skripti) ja siihen siirretyt tiedot erotetaan "?"-merkillä. Esimerkki tällaisesta osoitteesta:

http://example.com/cgi-bin/script.cgi?key1=value1&key2=value2

GET-menetelmää käytetään oletusarvoisesti selaimen osoiteriville syötetyille tiedoille. Sama merkkijono voidaan luoda lähetettäessä tietoja verkkolomakkeesta (tag

), jos lomakkeen lähetystapaa ei ole määritetty. Kaikki GET-menetelmällä lähetettävät tiedot lähetetään selkeänä tekstinä, joten sinun ei pitäisi koskaan käyttää sitä salasanojen tai muiden vastaavien tietojen lähettämiseen palvelimelle. GET-menetelmällä on kokorajoitus: kyselymerkkijono ei saa olla pidempi kuin 1024 merkkiä.

GET-menetelmällä lähetetyt tiedot välitetään QUERY_STRING-otsikossa merkkijonona, joka koostuu muotopareista avain=arvo, CGI-skripti voi saada sen samannimisen ympäristömuuttujan kautta.

Listaus 3. Tietojen lähettäminen verkkolomakkeesta GET-menetelmällä

Yksinkertainen CGI-komentosarja: Tietojen lähettäminen GET-menetelmällä Nimesi: name="käyttäjä">
Mistä olet kotoisin?: name="from">



Kun olet syöttänyt tiedot lomakkeelle listasta 3 ja napsauttanut "Lähetä"-painiketta, luodaan seuraavanlainen kyselymerkkijono:

http://example.com/cgi-bin/ sano hei?käyttäjä=jotain tekstiä&alkaen=toinen teksti

missä: sayhello - CGI-skriptin nimi; user ja from ovat parametrien nimiä; sometext ja othertext ovat käyttäjän syöttämiä vastaavien parametrien arvoja.

Lista 4 on esimerkkiskripti, joka voi käsitellä listan 3 lomaketietoja.

Listaus 4. Tietojen lähettäminen verkkolomakkeesta GET-menetelmällä

#!/usr/bin/perl paikallinen ($puskuri, @parit, $pari, $nimi, $arvo, %FORM); # Analysoi ympäristö $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; if ($ENV(" REQUEST_METHOD")eq" SAADA") ( $puskuri = $ENV(" QUERY_STRING"); ) # Jaa kyselymerkkijono avain/arvo-pareihin @pairs = split(/&/, $puskuri); foreach $pari (@pairs) (($nimi, $arvo) = split(/=/, $ pari) $arvo =~ tr/+/ /; $arvo =~ s/%(..)/pack("C", hex($1))/esim. Tallennamme tiedot taulukkoon header print "Content-type: text/html\n\n" # Lähetä hypertekstitulostus;< CGI tervehtii

Hei, $FORM(user) lähettäjältä $FORM(from)!



HTML exit;

Tiedonsiirto: POST-menetelmä

Yleensä POST-menetelmä soveltuu paremmin tiedon välittämiseen CGI-skriptiin. Lähetetyn tiedon lohko muodostetaan samalla tavalla kuin GET-menetelmässä, mutta varsinainen lähetys suoritetaan pyynnön rungossa. Tiedot syötetään CGI-sovellukseen kautta vakiotulo(stdin).

Jos haluat lähettää tietoja tällä menetelmällä, se on määritettävä erikseen lomakkeen kuvauksessa (action="POST").

Käsitelläkseen syötteen CGI-skriptin on luettava stdin, ja tehdäkseen tämän oikein sen on tiedettävä viestin koko muuttujasta CONTENT_LENGTH. Tämän havainnollistamiseksi muokataan ympäristöanalyysilohkoa listassa 4 korvaamalla se seuraavalla koodilla:

... # Analysoi ympäristö $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; if ($ENV(" REQUEST_METHOD")eq" LÄHETTÄÄ")( lue( STDIN, $puskuri, $ENV(" CONTENT_LENGTH"}); } ...

$puskurimuuttujaan tallennettujen parametrien ja niiden arvojen jatkokäsittely suoritetaan samalla tavalla kuin käytettäessä GET-menetelmää.

CGI:n edut

Monet CGI-ominaisuudet ovat nyt kopioitu tekniikoilla, kuten DHTML-, ActiveX- tai Java-sovelmilla. Palvelimen komentosarjojen käytön tärkeimmät edut ovat, että voit olla varma, että kaikki asiakkaat (harvinaisia ​​poikkeuksia lukuun ottamatta, jotka yleensä liittyvät tiettyjen resurssien käytön estoon palomuurin tasolla) pystyvät työskentelemään palvelinsovelluksen kanssa. Asiakasohjelmat voidaan yksinkertaisesti poistaa käytöstä selaimessa tai niitä ei tueta ollenkaan.

CGI:n haitat

Tämän tekniikan suurin haittapuoli on web-palvelimen lisääntyneet suorituskykyvaatimukset. Tosiasia on, että jokainen kutsu CGI-sovellukseen synnyttää uuden prosessin, joka sisältää kaikki siihen liittyvät lisäkustannukset. Jos sovellus on kirjoitettu virheellisesti, tilanne on mahdollinen, kun se esimerkiksi menee silmukkaan. Selain katkaisee yhteyden, kun aikakatkaisu umpeutuu, mutta palvelinpuolella prosessi jatkuu, kunnes järjestelmänvalvoja pakottaa sen katkaisemaan. Tässä suhteessa asiakasskripteillä on merkittävä etu, koska ne teloitetaan paikallisesti.

Toinen CGI:n haittapuoli on, että verkkopalvelin on vähemmän turvallinen kuin muut ratkaisut. Palvelinresurssien käyttöoikeuksien väärin asettaminen CGI-sovelluksesta voi vaarantaa verkkopalvelimen suorituskyvyn lisäksi myös tietoturvan. Mitä tahansa verkkotekniikkaa voidaan kuitenkin pitää määritelmän mukaan mahdollisesti vaarallisena.

Tämän sivun pysyvä osoite:

Andover, Massachusetts, 19. marraskuuta 2003

The Commerce Group, Inc. (NYSE: CGI), Massachusettsin suurin yksityisten henkilöautovakuutusten kirjoittaja ja CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), johtava tietotekniikan ja liiketoiminnan prosessointipalvelujen toimittaja, ilmoitti tänään allekirjoittaneensa kuuden vuoden liiketoimintaprosessien ulkoistamissopimuksen (BPO) uusimisen arvoltaan US$35 miljoonaa. CGI tarjoaa täydet vakuutusten käsittelypalvelut Massachusettsin yksityisille henkilö- ja kaupallisille autolinjoille sekä CGI:n CollaborativeEdge-toimistorajapintatyökalun, sovellustuen ja -ylläpidon, sääntelytuen, järjestelmäkonsultoinnin ja dokumenttien hallintapalvelut.

Gerald Fels, Commerce Groupin varatoimitusjohtaja ja talousjohtaja, totesi: "Massachusettsin johtavana yksityisten henkilöautojen toimittajana tavoitteemme on tarjota agenteillemme ja työntekijöillemme palveluita, jotka auttavat heitä suoriutumaan korkeimmalla tasollaan. Vuosien varrella olemme edistäneet vahvaa suhdetta CGI:n kanssa. Heidän järjestelmänsä on vankka ja tarkka, ja heidän tiiminsä tuntee hyvin sisäiset käsittelyjärjestelmämme. Se on meille tärkeää."

CGI:n vakuutusliiketoiminnan johtaja Serge LaPalme lisäsi: "Olemme erittäin tyytyväisiä voidessamme jatkaa yli 30 vuoden suhdetta Commerce Groupin kanssa. Commerce Group on edelleen yksi arvostetuista liikekumppaneistamme ja on strateginen Autamme asiakkaitamme keskittymään edelleen ydinliiketoimintaansa, ja hyödynnämme uusia teknologioita silloin, kun se on järkevää mukauttaa olemassa olevia ratkaisuja tälle jatkuvasti kehittyvälle alalle."

Tietoja The Commerce Group, Inc.

Vakuutusalan holdingyhtiö Commerce Group, Inc.:n pääkonttori sijaitsee Websterissä, Massachusettsissa. Commerce Groupin omaisuus- ja tapaturmavakuutustytäryhtiöitä ovat The Commerce Insurance Company ja Citation Insurance Company Massachusettsissa, Commerce West Insurance Company Kaliforniassa ja American Commerce Insurance Company Ohiossa. Tytäryhtiöidensä kautta Commerce Group on sijoittunut 22. sijalle. maan suurin henkilöautovakuutuskonserni, A.M. Paras, perustuen vuoden 2002 suoramaksutietoihin.

Tietoja CGI:stä
Vuonna 1976 perustettu CGI on henkilöstömääränsä perusteella Pohjois-Amerikan viidenneksi suurin itsenäinen tietotekniikkapalveluyritys. CGI ja sen tytäryhtiöt työllistävät 20 000 ammattilaista. CGI:n vuotuinen liikevaihto on tällä hetkellä 2,8 miljardia CDN dollaria (1,9 miljardia dollaria), ja 30. syyskuuta 2003 CGI:n tilauskanta oli 12,3 miljardia CDN dollaria (9,1 miljardia dollaria). CGI tarjoaa päästä päähän IT- ja liiketoimintaprosessipalveluita asiakkaille kaikkialla maailmassa Kanadan, Yhdysvaltojen ja Euroopan toimistoista. CGI:n osakkeet on listattu TSX:ssä (GIB.A) ja NYSE:ssä (GIB) ja ne sisältyvät TSX 100 Composite -indeksiin sekä S&P/TSX Canadian Information Technology- ja Canadian MidCap -indekseihin: .

Interaktiivinen käyttöliittymä on järjestelmä, joka mahdollistaa vuorovaikutuksen käyttäjän ja ohjelman välillä. WWW:lle interaktiivinen käyttöliittymä voidaan määritellä HTML-dokumenttien sarjaksi, joka toteuttaa käyttöliittymän. Voit myös ehdollisesti luokitella käyttöliittymän rakentamisen periaatteet HTML-dokumentin luontityypin mukaan:

    staattinen;

    dynaaminen.

Ensimmäisessä tapauksessa käyttöliittymän lähde on jollain teksti- tai HTML-suuntautuneella editorilla luotu HTML-dokumentti. Tästä syystä tämä asiakirja pysyy muuttumattomana käytön aikana. Toisessa tapauksessa käyttöliittymälähde on cgi-moduulin luoma HTML-dokumentti. Tästä johtuen käyttöliittymän muokkaamisessa käytön aikana on jonkin verran joustavuutta.

Siten voimme esitellä WWW:n interaktiivisen käyttöliittymän käsitteen. Interaktiivinen käyttöliittymä WWW:lle on sarja staattisia tai dynaamisesti luotuja HTML-dokumentteja, jotka toteuttavat käyttöliittymän.

Lähes kaikki tehtävät, jotka ratkaisevat datan vastaanottamisen asiakkaalta, sisältävät käyttöliittymän rakentamisen. Mielenkiintoisinta on rajapintojen rakentaminen erilaisiin tietokantoihin, pääsy SQL-palvelimeen, tiedon vastaanottaminen oheislaitteilta ja asiakastyöasemien luominen. Kaikki tämä on mahdollista CGI:n (Common Gateway Interface) kautta. Common Gateway Interface (CGI) on standardi ulkoisen sovellusohjelman rajapinnalle WWW-palvelimeen.

Yllä olevien rajapintojen rakentamistehtävä on jaettu kahteen osaan (Liite 2):

    Asiakasosa. Asiakasosan luomiseksi sinun on luotava HTML-dokumentti, joka toteuttaa käyttöliittymän. HTML:ssä tämä on mahdollista lomakkeiden kautta.

2. Palvelinosa. Palvelinosa koostuu suoritettavasta moduulista, joka ratkaisee päätehtävät: asiakasosasta tulevien tietojen käsittely, vastauksen generointi HTML-muodossa jne. Tällaista moduulia kutsutaan cgi-moduuli.

cgi-spesifikaatio

CGI määrittelee 4 tietovirtaa (Liite 3):

1) Ympäristömuuttujat ehdollisesti jaettu kahteen tyyppiin:

a) yhteinen kaikentyyppisille pyynnöille (asetettu kaikille tyypeille);

b) pyyntömenetelmästä riippuen.

2) Vakiolähtövirta

CGI- moduuli tulostaa tiedot vakiolähtövirtaan. Tämä tulos voi olla joko cgi-moduulin luoma asiakirja tai ohje palvelimelle, mistä tarvittava dokumentti hankitaan. Yleensä cgi-moduuli tuottaa tulostensa. Tämän lähestymistavan etuna on se cgi-moduuli ei saa luoda täydellistä HTTP-otsikkoa jokaiselle pyynnölle.

3) Vakiosyöttövirta

Pyyntömenetelmän tapauksessa LÄHETTÄÄ tiedot välitetään HTTP-pyynnön sisältönä. Ja ne lähetetään vakiosyöttövirtaan. Tiedot välitetään cgi-moduulille seuraavassa muodossa: nimi= arvo& nimi1= arvo1&...& nimiN= arvoN,

Jossa nimi- muuttujan nimi, arvo- muuttujan arvo, N- muuttujien lukumäärä.

CONTENT_LENGTH tavu lähetetään tavalliseen syöttötiedoston kuvaajaan. Palvelin välittää myös CONTENT_TYPE (tietotyyppi) cgi-moduulille. Palvelin ei lähetä tiedoston loppumerkkiä sen jälkeen, kun on lähetetty CONTENT_LENGTH tavua dataa tai kun cgi-moduuli on lukenut ne. Ympäristömuuttujat CONTENT_LENGTH ja CONTENT_TYPE asetetaan, kun palvelin suorittaa cgi-moduulin. Jos lomakkeen suorittamisen tuloksena FORM-tunnisteargumentilla - METHOD="POST" syntyy tietomerkkijono firm=MMM&price=100023, palvelin asettaa CONTENT_LENGTH-arvon arvoon 21 ja CONTENT_TYPE:ksi application/x-www. -form-urlencoded, ja standardiin tulovirta lähettää datalohkon.

Menetelmän tapauksessa SAADA, tietomerkkijono välitetään osana URL-osoitetta. Ne. esimerkiksi http://host/cgi-bin/script?name1=value1&name2=value2

Tässä tapauksessa ympäristömuuttuja QUERY_STRING saa arvon nimi1=arvo1&nimi2=arvo2

4) Argumentit komentorivi

CGI- komentorivillä oleva moduuli palvelimelta vastaanottaa: URL-osoitteen loppuosan cgi-moduulin nimen jälkeen ensimmäisenä parametrina (ensimmäinen parametri on tyhjä, jos vain cgi-moduulin nimi oli läsnä), ja avainsanaluettelon hakukomentosarjan komentorivin loppuosa tai lomakekenttien vuorottelevat nimet, joihin on lisätty yhtäläisyysmerkki ja vastaavat muuttujan arvot. Avainsanat, nimet ja lomakekenttien arvot lähetetään dekoodattuina (HTTP URL-koodausmuodosta) ja koodataan uudelleen Bournen komentotulkin koodaussääntöjen mukaisesti, jotta komentorivillä oleva cgi-moduuli vastaanottaa tiedot ilman ylimääräisiä suorituksia. tuloksia.

Kun "nimi-arvo" -rakenne on muodostettu, voit alkaa ratkaista ongelmia, joita varten cgi-moduuli todella luotiin. Seuraava tärkeä kohta on cgi-moduulin dynaaminen HTML-dokumentin luominen (moduulin toiminnan tuloksen muotoilu). Esimerkiksi valintataulukot tietokannasta. Tätä varten cgi-moduulin on tulostettava rivistä koostuva otsikko vakiolähtövirtaan: Sisältötyyppi: text/html ja tyhjä merkkijono (kaksi merkkiä CR). Tämän otsikon jälkeen voit antaa minkä tahansa tekstin HTML-muodossa.

Verkkokauppojen omistajat tuntevat käsitteen "sähköinen kaupankäynti" omakohtaisesti, he tietävät jo vastauksen kysymykseen "sähköinen kaupankäynti - mitä se on?" Mutta jos pääset asian ytimeen, esiin tulee monia vivahteita ja tämä termi saa laajemman merkityksen.

Sähköinen kaupankäynti: mitä se on?

Yleinen käsite on seuraava: sähköisellä kaupankäynnillä tarkoitetaan tiettyä lähestymistapaa liiketoiminnan harjoittamiseen, joka sisältää useiden digitaalista tiedonsiirtoa käyttävien toimintojen sisällyttämisen tavaroiden toimittamiseen tai palvelujen/työn tarjoamiseen, mukaan lukien Internet.

Näin ollen kyseessä on mikä tahansa kaupallinen liiketoimi, joka suoritetaan käyttämällä sähköistä viestintävälinettä.

Työsuunnitelma on järjestetty seuraavasti:

  • kuka tahansa voi olla bloggaaja tai mikä tahansa muu oman Internet-sivunsa omistaja) rekisteröityy tähän järjestelmään;
  • saa oman linkin;
  • sijoittaa erityisen koodin verkkosivulleen - e-Commerce Partners Networkin valitun virallisen kumppanin mainos tulee näkyviin;
  • valvoo verkkosivuston muuntamista;
  • ansaitsee tietyn prosenttiosuuden jokaisesta kumppanilinkkiä seuraavan verkkosivustosi vierailijan ostoksesta.

WP sähköinen kaupankäynti

Suuri joukko ihmisiä on nykyään intohimoinen sähköiseen kaupankäyntiin, mikä johtuu ensisijaisesti halusta luoda oma verkkosivusto, ainutlaatuinen verkkokauppa omien tuotteidensa myyntiä varten. Vastatakseen tähän kasvavaan kysyntään kehittäjät ovat keskittyneet luomaan verkkokauppamalleja. Katsotaanpa, mitä tämä on seuraavaksi.

Yksi esimerkki malleista on WordPress-verkkokauppa. Se on WordPressin (yksi tunnetuimmista verkkoresurssienhallintajärjestelmistä) ostoskorilaajennus, joka on tarkoitettu ensisijaisesti blogien luomiseen ja järjestämiseen. Se tarjotaan täysin ilmaiseksi, ja sen avulla sivuston kävijät voivat tehdä ostoksia verkkosivustolla.

Toisin sanoen tämän laajennuksen avulla voit luoda verkkokaupan (WordPressiin perustuen). Tämä verkkokauppalaajennus sisältää kaikki tarvittavat työkalut, asetukset ja vaihtoehdot nykyajan tarpeisiin.

World Wide Webin ansiosta lähes kuka tahansa voi tarjota tietoa verkossa silmää helpottavassa ja laajalti levitettävässä muodossa. Olet epäilemättä surffaillut Internetissä ja nähnyt muita sivustoja, ja nyt tiedät todennäköisesti, että pelottavat lyhenteet, kuten "HTTP" ja "HTML", ovat yksinkertaisesti lyhenne sanoista "Web" ja "tapa ilmaista tietoa Internetissä". Sinulla saattaa jo olla kokemusta tiedon esittämisestä Internetissä.

Internet on osoittautunut ihanteelliseksi välineeksi tiedon jakamiseen, kuten sen valtava suosio ja laaja kehitys osoittavat. Vaikka jotkut ovat kyseenalaistaneet Internetin hyödyllisyyden ja pitäneet sen laajaa kehitystä ja suosiota pääasiassa tunkeilevan mainonnan ansioksi, Internet on kiistatta tärkeä väline kaikenlaisen tiedon esittämiselle. Saatavilla on monia palveluita ajantasaisten tietojen (uutiset, sää, suorat urheilutapahtumat) ja viitemateriaalien tarjoamiseen sähköisesti, mutta saatavilla on myös huomattavia määriä muun tyyppistä tietoa. IRS, joka jakoi kaikki vuoden 1995 veroilmoituslomakkeensa ja muut tiedot World Wide Webin kautta, myönsi äskettäin vastaanottaneensa fanipostia verkkosivustolleen. Kuka olisi uskonut, että veroviranomainen saa koskaan fanipostia? Tämä ei johtunut siitä, että hänen sivustonsa oli suunniteltu hyvin, vaan siitä, että se oli osoittautunut todella hyödylliseksi työkaluksi tuhansille, ehkä miljoonille ihmisille.

Mikä tekee verkosta ainutlaatuisen ja houkuttelevan tietopalvelun? Ensinnäkin se tarjoaa hypermediarajapinnan tiedoille. Ajattele tietokoneesi kiintolevyä. Tyypillisesti tiedot ilmaistaan ​​lineaarisesti, kuten tiedostojärjestelmä. Sinulla on esimerkiksi useita kansioita, ja jokaisen kansion sisällä on joko asiakirjoja tai muita kansioita. Verkko käyttää erilaista paradigmaa ilmaisemaan tietoa, jota kutsutaan hypermediaksi. Hypertekstiliittymä koostuu asiakirjasta ja linkeistä. Linkit ovat sanoja, joita napsautetaan nähdäksesi muita asiakirjoja tai löytääksesi muuntyyppisiä tietoja. Web laajentaa hypertekstin käsitteen kattamaan muun tyyppiset mediat, kuten grafiikat, äänet, videot (siis nimi "hypermedia"). Kun valitset asiakirjasta tekstin tai grafiikan, voit nähdä valitun kohteen liittyviä tietoja useissa eri muodoissa.

Melkein kaikki voivat hyötyä tästä yksinkertaisesta ja ainutlaatuisesta tavasta esittää ja jakaa tietoa, aina tutkijoista, jotka haluavat käyttää tietoja välittömästi kollegoidensa kanssa, liikemiehiin, jotka jakavat tietoja yrityksestään kaikkien kanssa. Vaikka tiedon antaminen on kuitenkin erittäin tärkeää, viime vuosina monet ovat kokeneet tiedon vastaanottamisen olevan yhtä tärkeä prosessi.

Vaikka Web tarjoaa ainutlaatuisen hypermediarajapinnan tiedoille, on monia muita tehokkaita tapoja jakaa tietoa. Esimerkiksi verkkopalvelut, kuten File Transfer Protocol (FTP) ja Gopher-uutisryhmä, olivat olemassa kauan ennen World Wide Webiä. Sähköposti on ollut ensisijainen viestintä- ja tiedonvaihtoväline Internetissä ja useimmissa muissa verkoissa lähes näiden verkkojen alusta lähtien. Miksi Internetistä on tullut niin suosittu tapa jakaa tietoa? Internetin multimedianäkökulma on vaikuttanut merkittävästi sen ennennäkemättömään menestykseen, mutta jotta Internet olisi tehokkain, sen on oltava interaktiivinen.

Ilman kykyä vastaanottaa käyttäjän syötteitä ja tarjota tietoa Web olisi täysin staattinen ympäristö. Tiedot olisivat saatavilla vain kirjoittajan määrittelemässä muodossa. Tämä heikentäisi yhtä laskennan kykyä yleensä: interaktiivista tietoa. Esimerkiksi sen sijaan, että käyttäjä pakottaisi katsomaan useita asiakirjoja ikään kuin hän selailisi kirjaa tai sanakirjaa, olisi parempi antaa käyttäjän tunnistaa avainsanat kiinnostavasta aiheesta. Käyttäjät voivat muokata tietojen esitystapaa sen sijaan, että luottaisivat sisällöntuottajan määrittelemään jäykkään rakenteeseen.

Termi "Web-palvelin" voi olla harhaanjohtava, koska se voi viitata sekä fyysiseen koneeseen että ohjelmistoon, jota se käyttää kommunikoimaan Internet-selaimien kanssa. Kun selain pyytää tiettyä Web-osoitetta, se muodostaa ensin yhteyden laitteeseen Internetin kautta ja lähettää Web-palvelinohjelmistolle asiakirjapyynnön. Tämä ohjelmisto toimii jatkuvasti, odottaa tällaisten pyyntöjen saapumista ja vastaa niihin.

Vaikka palvelimet voivat lähettää ja vastaanottaa dataa, itse palvelimella on rajoitettu toiminnallisuus. Esimerkiksi alkeellisin palvelin voi lähettää vain vaaditun tiedoston selaimeen. Palvelin ei yleensä tiedä mitä tehdä tällä tai toisella lisätulolla. Jos Internet-palveluntarjoaja ei kerro palvelimelle, kuinka näitä lisätietoja tulee käsitellä, palvelin todennäköisesti jättää syötteen huomioimatta.

Jotta palvelin pystyy suorittamaan muitakin toimintoja kuin etsimään ja lähettämään tiedostoja Internet-selaimeen, sinun on osattava laajentaa palvelimen toimintoja. Esimerkiksi Web-palvelin ei voi etsiä tietokannasta käyttäjän syöttämän avainsanan perusteella ja palauttaa useita vastaavia asiakirjoja, ellei tällaista ominaisuutta ole jotenkin ohjelmoitu palvelimeen.

Mikä on CGI?

Common Gateway Interface (CGI) on palvelinliittymä, jonka avulla voit laajentaa palvelimen toimintoja. CGI:n avulla voit olla vuorovaikutuksessa käyttäjien kanssa, jotka käyttävät sivustoasi. Teoreettisella tasolla CGI antaa palvelimelle mahdollisuuden jäsentää (tulkkia) selaimen syötettä ja palauttaa tietoja käyttäjän syötteen perusteella. Käytännön tasolla CGI on käyttöliittymä, jonka avulla ohjelmoija voi kirjoittaa ohjelmia, jotka kommunikoivat helposti palvelimen kanssa.

Yleensä palvelimen ominaisuuksien laajentamiseksi sinun on muokattava palvelinta itse. Tämä ratkaisu ei ole toivottava, koska se vaatii Internet-protokollan verkkoohjelmoinnin alemman kerroksen ymmärtämistä. Tämä vaatisi myös palvelimen lähdekoodin muokkaamista ja kääntämistä tai mukautetun palvelimen kirjoittamista jokaista tehtävää varten. Oletetaan, että haluamme laajentaa palvelimen ominaisuuksia niin, että se toimii web-sähköpostiyhdyskäytävänä, joka ottaa käyttäjän syöttämät tiedot selaimesta ja lähettää ne sähköposti toiselle käyttäjälle. Palvelimen on lisättävä koodi jäsentääkseen syötteen selaimesta, välittääkseen sen sähköpostitse toiselle käyttäjälle ja lähettääkseen vastauksen takaisin selaimeen verkkoyhteyden kautta.

Ensinnäkin tällainen tehtävä vaatii pääsyn palvelinkoodiin, mikä ei aina ole mahdollista.

Toiseksi se on vaikeaa ja vaatii laajaa teknistä tietämystä.

Kolmanneksi tämä koskee vain tiettyä palvelinta. Jos sinun on siirrettävä palvelimesi toiselle alustalle, sinun on suoritettava tai ainakin vietettävä paljon aikaa koodin siirtämiseen kyseiselle alustalle.

Miksi CGI?

CGI tarjoaa kannettavan ja yksinkertaisen ratkaisun näihin ongelmiin. CGI-protokolla määrittää standardin tavan ohjelmille kommunikoida Web-palvelimen kanssa. Ilman erityisosaamista voit kirjoittaa ohjelman millä tahansa konekielellä, joka on rajapinta ja kommunikoi Web-palvelimen kanssa. Tämä ohjelma toimii kaikkien Web-palvelimien kanssa, jotka ymmärtävät CGI-protokollan.

CGI-viestintä tapahtuu vakiotulon ja -lähdön avulla, mikä tarkoittaa, että jos osaat tulostaa ja lukea tietoja ohjelmointikielelläsi, voit kirjoittaa Web-palvelinsovelluksen. Tulon ja lähdön jäsentämisen lisäksi CGI-sovellusten ohjelmointi vastaa lähes minkä tahansa muun sovelluksen ohjelmointia. Esimerkiksi "Hei, maailma!" -ohjelman ohjelmoimiseksi käytät kielesi tulostustoimintoja ja CGI-ohjelmille määritettyä muotoa oikean viestin tulostamiseen.

Ohjelmointikielen valinta

Koska CGI on universaali käyttöliittymä, et ole rajoitettu mihinkään tiettyyn konekieleen. Tärkeä usein kysytty kysymys on: mitä ohjelmointikieliä voidaan käyttää CGI-ohjelmointiin? Voit käyttää mitä tahansa kieltä, jolla voit tehdä seuraavat:

  • Tulosta vakiotulostukseen
  • Lue vakiosyötteestä
  • Lue muuttuvista tiloista

Melkein kaikki ohjelmointikielet ja monet skriptikielet tekevät nämä kolme asiaa, ja voit käyttää mitä tahansa niistä.

Kielet kuuluvat johonkin seuraavista kahdesta luokasta: käännetyt ja tulkitut. Käännetty kieli, kuten C tai C++, on yleensä pienempi ja nopeampi, kun taas tulkitut kielet, kuten Perl tai Rexx, vaativat joskus suuren tulkin lataamisen käynnistyksen yhteydessä. Lisäksi voit jakaa binäärikoodeja (konekielelle muuntuvaa koodia) ilman lähdekoodia, jos kielesi on käännettävä. Tulkittavien komentosarjojen jakaminen tarkoittaa yleensä lähdekoodin jakamista.

Ennen kuin valitset kielen, sinun on ensin harkittava prioriteettejasi. Sinun on punnittava yhden ohjelmointikielen nopeuden ja tehokkuuden etuja toisen ohjelmoinnin helppouteen verrattuna. Jos haluat oppia toista kieltä, sen sijaan, että käyttäisit jo osaamaasi kieltä, punnita huolellisesti molempien kielten edut ja haitat.

Kaksi yleisimmin käytettyä CGI-ohjelmointikieltä ovat C ja Perl (molempia käsitellään tässä kirjassa). Molemmilla on selkeät edut ja haitat. Perl on erittäin korkeatasoinen kieli ja samalla tehokas kieli, joka sopii erityisen hyvin tekstin jäsentämiseen. Vaikka sen helppokäyttöisyys, joustavuus ja teho tekevät siitä houkuttelevan kielen CGI-ohjelmointiin, sen suhteellisen suuri koko ja hitaampi toiminta tekevät siitä joskus sopimattoman joihinkin sovelluksiin. C-ohjelmat ovat pienempiä, tehokkaampia ja tarjoavat alemman tason järjestelmän hallinnan, mutta niitä on monimutkaisempi ohjelmoida, niissä ei ole kevyitä sisäänrakennettuja tekstinkäsittelyrutiineja ja niitä on vaikeampi korjata.

Mikä kieli sopii parhaiten CGI-ohjelmointiin? Se, jota pidät ohjelmoinnin kannalta kätevämpänä. Molemmat ovat yhtä tehokkaita CGI-sovellusten ohjelmointiin, ja oikeilla kirjastoilla molemmilla on samanlaiset ominaisuudet. Jos sinulla on kuitenkin vaikeasti tavoitettavissa oleva palvelin, voit käyttää pienempiä, käännettyjä C-ohjelmia.

Varoitukset

CGI-sovelluksille on olemassa joitakin tärkeitä vaihtoehtoja. Monet palvelimet sisältävät nyt API-ohjelmoinnin, mikä helpottaa suorien palvelinlaajennusten ohjelmointia kuin erilliset CGI-sovellukset. API-palvelimet ovat yleensä tehokkaampia kuin CGI-ohjelmat. Muissa palvelimissa on sisäänrakennettuja toimintoja, jotka voivat käsitellä erityisiä ei-CGI-elementtejä, kuten tietokantalinkityksiä. Lopuksi, joitain sovelluksia voidaan käsitellä joillakin uusilla asiakaspuolen (eikä palvelinpuolen) tekniikoilla, kuten Java. Vanhentuuko CGI nopeasti näin nopeiden tekniikan muutosten myötä?

Tuskin. CGI:llä on useita etuja uudempiin teknologioihin verrattuna.

  • Se on monipuolinen ja kannettava. Voit kirjoittaa CGI-sovelluksen lähes millä tahansa ohjelmointikielellä millä tahansa alustalla. Jotkut vaihtoehdot, kuten palvelimen API, rajoittavat sinut tiettyihin kieliin ja ovat paljon vaikeampia oppia.
  • On epätodennäköistä, että asiakaspuolen teknologiat, kuten Java, korvaavat CGI:n, koska on joitain sovelluksia, joiden suorittamiseen palvelinpuolen sovellukset sopivat paljon paremmin.
  • Monet CGI:n rajoituksista ovat HTML:n tai HTTP:n rajoituksia. Internet-standardien yleistyessä kehittyvät myös CGI-ominaisuudet.

Jatkaa

Common Gateway Interface on protokolla, jonka avulla ohjelmat ovat vuorovaikutuksessa Web-palvelimien kanssa. CGI:n monipuolisuus antaa ohjelmoijille mahdollisuuden kirjoittaa yhdyskäytäväohjelmia melkein millä tahansa kielellä, vaikka eri kieliin liittyy monia kompromisseja. Ilman tätä kykyä vuorovaikutteisten Web-sivujen luominen olisi vaikeaa, parhaimmillaankin palvelinmuutoksia vaatisi, ja vuorovaikutteisuus ei olisi useimpien käyttäjien saatavilla, jotka eivät ole sivuston ylläpitäjiä.

Luku 2: Perusteet

Useita vuosia sitten loin sivun eräälle Harvardin yliopistolle, jonne ihmiset voivat kommentoida niitä. Internet oli tuolloin nuori ja dokumentaatio oli niukkaa. Minä, kuten monet muutkin, luotin muiden luomiin lyhyisiin dokumentaatioihin ja ohjelmointijärjestelmiin opettaakseni itselleni CGI-ohjelmoinnin. Vaikka tämä tutkimusmenetelmä vaati jonkin verran etsintää, monia kokeiluja ja aiheutti monia kysymyksiä, se oli erittäin tehokas. Tämä luku on tulosta varhaisesta työstäni CGI:n kanssa (tietenkin muutamalla säädöllä).

Vaikka yhteisen yhdyskäytävän käyttöliittymän täydellinen ymmärtäminen ja hallitseminen kestää jonkin aikaa, itse protokolla on melko yksinkertainen. Jokainen, jolla on perusohjelmointitaitoja ja joka tuntee Webin, voi nopeasti oppia ohjelmoimaan melko monimutkaisia ​​CGI-sovelluksia aivan kuten minä ja muut opimme tekemään useita vuosia sitten.

Tämän luvun tarkoituksena on esittää CGI:n perusteet kattavasti, vaikkakin tiivistetyllä tavalla. Jokainen tässä käsitelty käsite esitellään yksityiskohtaisesti seuraavissa luvuissa. Tämän luvun suorittamisen jälkeen voit kuitenkin aloittaa CGI-sovellusten ohjelmoinnin välittömästi. Kun saavutat tämän tason, voit oppia CGI:n hienouksia joko lukemalla tämän kirjan loppuosan tai yksinkertaisesti kokeilemalla itse.

Voit tiivistää CGI-ohjelmoinnin kahteen tehtävään: tiedon vastaanottamiseen Web-selaimesta ja tietojen lähettämiseen takaisin selaimeen. Tämä tehdään melko intuitiivisesti, kun olet perehtynyt CGI-sovellusten normaaliin käyttöön. Usein käyttäjää pyydetään täyttämään jokin lomake, esimerkiksi lisäämään nimensä. Kun käyttäjä täyttää lomakkeen ja painaa Enter, nämä tiedot lähetetään CGI-ohjelmaan. CGI-ohjelman on sitten muutettava nämä tiedot joksikin ymmärtämästään, käsiteltävä ne vastaavasti ja lähetettävä ne sitten takaisin selaimeen, olipa kyseessä sitten yksinkertainen vahvistus tai monikäyttöisen tietokannan haun tulos.

Toisin sanoen CGI:n ohjelmointi vaatii ymmärrystä, kuinka vastaanotetaan syöte Internet-selaimesta ja kuinka tuloste lähetetään takaisin. Mitä tapahtuu CGI-ohjelman syöttö- ja lähtövaiheiden välillä, riippuu kehittäjän tavoitteesta. Huomaat, että CGI-ohjelmoinnin suurin vaikeus piilee tässä välivaiheessa; Kun opit työskentelemään syötteen ja lähdön kanssa, se riittää käytännössä CGI-kehittäjäksi.

Tässä luvussa opit CGI-syötön ja -tulosteen taustalla olevat periaatteet sekä muut perustaidot, joita tarvitset CGI:n kirjoittamiseen ja käyttämiseen, mukaan lukien asiat, kuten HTML-lomakkeiden luominen ja CGI-ohjelmien nimeäminen. Tämä luku kattaa seuraavat aiheet:

  • Perinteinen ohjelma "Hei, maailma!";
  • CGI-tulostus: Tietojen lähettäminen takaisin Internet-selaimessa näytettäväksi;
  • Sovelluksen määrittäminen, asentaminen ja suorittaminen. Opit eri Web-alustoista ja -palvelimista;
  • CGI-syöttö: Web-selaimen lähettämien tietojen tulkinta. Johdanto hyödyllisiin ohjelmointikirjastoihin tällaisen syötteen jäsentämiseen;
  • Yksinkertainen esimerkki: se kattaa kaikki tietyn luvun oppitunnit;
  • Ohjelmointistrategia.

Tämän luvun luonteesta johtuen käsittelen vain kevyesti joitakin aiheita. Älä huoli; Kaikkia näitä aiheita käsitellään paljon perusteellisemmin muissa luvuissa.

Hei, Maailma!

Aloitat perinteisellä ohjelmointiongelmalla. Kirjoitat ohjelman, joka näyttää "Hei, maailma!" Web-selaimessasi. Ennen kuin kirjoitat tämän ohjelman, sinun on ymmärrettävä, mitä tietoja Web-selain odottaa saavansa CGI-ohjelmilta. Sinun on myös osattava ajaa tätä ohjelmaa, jotta voit nähdä sen toiminnassa.

CGI on kieliriippumaton, joten voit toteuttaa tämän ohjelman millä tahansa kielellä. Tässä käytetään useita eri kieliä osoittamaan kunkin kielen riippumattomuutta. Perlissä "Hei, maailma!" näkyy listauksessa 2.1.

Listaus 2.1. Hei, Maailma! Perlissä. #!/usr/local/bin/perl # Hello.cgi - Ensimmäinen CGI-ohjelmatulostukseni "Content-Type: text/html\n\n"; tulosta" \n"; tulosta" Hei, Maailma!"; tulosta"\n"; tulosta" \n"; tulosta"

Hei, Maailma!

\n"; tulosta"

\n";

Tallenna tämä ohjelma nimellä hello.cgi ja asenna se oikeaan paikkaan. (Jos et ole varma, missä se on, älä huoli; löydät sen myöhemmin tämän luvun kohdasta "CGI-ohjelman asentaminen ja suorittaminen".) Useimmille palvelimille tarvitsemasi hakemisto on cgi-bin . Kutsu nyt ohjelma verkkoselaimesta. Useimmille tämä tarkoittaa seuraavan yhtenäisen resurssipaikantimen (URL) avaamista:

http://hostname/directoryname/hello.cgi

Isäntänimi on Web-palvelimesi nimi ja hakemiston nimi on hakemisto, johon sijoitat hello.cgi (todennäköisesti cgi-bin).

Halkaisu hello.cgi

Hello.cgi:ssä on muutamia huomioitavia asioita.

Ensinnäkin käytät yksinkertaisia ​​tulostuskomentoja. CGI-ohjelmat eivät vaadi erityisiä tiedostokuvauksia tai tulosteen kuvauksia. Voit lähettää tulosteen selaimeen tulostamalla stdout-tiedostoon.

Toiseksi, huomaa, että ensimmäisen tulostettavan lausunnon (Content-Type: text/html) sisältö ei näy verkkoselaimessasi. Voit lähettää takaisin selaimeen mitä tahansa tietoja (HTML-sivu, grafiikka tai ääni), mutta ensin sinun on kerrottava selaimelle, millaista dataa olet lähettämässä. Tämä rivi kertoo selaimelle, millaista tietoa se odottaa - tässä tapauksessa HTML-sivua.

Kolmanneksi ohjelman nimi on hello.cgi. Sinun ei aina tarvitse käyttää .cgi-laajennusta CGI-ohjelmasi nimen kanssa. Vaikka monien kielten lähdekoodissa käytetään myös .cgi-tunnistetta, sitä ei käytetä kielityypin ilmoittamiseen, vaan se on tapa, jolla palvelin tunnistaa tiedoston suoritettavaksi tiedostoksi grafiikkatiedoston, HTML-tiedoston tai HTML-tiedoston sijaan. tekstitiedosto. Palvelimet on usein määritetty yrittämään suorittaa vain ne tiedostot, joissa on tämä laajennus, jolloin kaikkien muiden tiedostojen sisältö näytetään. Vaikka .cgi-tunnisteen käyttäminen ei ole pakollista, sitä pidetään silti hyvänä käytäntönä.

Yleisesti ottaen hello.cgi koostuu kahdesta pääosasta:

  • kertoo selaimelle, mitä tietoja odottaa (sisältötyyppi: text/html)
  • kertoo selaimelle, mitä näyttää (Hei, maailma!)

Hei, Maailma! in C

CGI-ohjelmien kieliriippumattomuuden osoittamiseksi luettelo 2.2 näyttää C-kielellä kirjoitetun hello.cgi-ohjelman vastineen.

Listaus 2.2. Hei, Maailma! C. /* hello.cgi.c - Hello, World CGI */ #include int main() ( printf("Sisältötyyppi: text/html\r\n\r\n"); printf(" \n"); printf(" Hei, Maailma!\n"); printf("\n"); printf(" \n"); printf("

Hei, Maailma!

\n"); printf("

\n");)

Huom

Huomaa, että hello.cgi:n Perl-versio käyttää Content-Type-tulostusta ": text/html\n\n "; Vaikka versio C käyttää Printf("Content-Type: text/html\r\n\r\n");

Miksi Perl tulostaa operaattorin kahteen rivinvaihtoon (\n), kun taas C printf päättyy kahteen rivinvaihtoon ja rivinvaihtoon (\r\n)?

Teknisesti otsikot (kaikki tulosteet ennen tyhjää riviä) odotetaan erotettavaksi rivinvaihdolla ja rivinvaihdolla. Valitettavasti DOS- ja Windows-koneissa Perl kääntää \r:n toiseksi rivinvaihdoksi eikä rivinvaihtoksi.

Vaikka Perlin poikkeus on teknisesti virheellinen, se toimii lähes kaikissa protokollissa ja on yhtä kannettava kaikilla alustoilla. Siksi kaikissa tämän kirjan Perl-esimerkeissä käytän rivinvaihdon erottavia otsikoita rivinvaihdon ja rivinvaihdon sijaan.

Sopiva ratkaisu tähän ongelmaan on esitetty luvussa 4, Johtopäätös.

Web-palvelin tai selain eivät välitä siitä, millä kielellä ohjelma kirjoitetaan. Vaikka jokaisella kielellä on etuja ja haittoja CGI-ohjelmointikielenä, on parasta käyttää kieltä, jonka kanssa työskentelet mieluiten. (Ohjelmointikielen valintaa käsitellään tarkemmin luvussa 1, “Yleinen yhdyskäytäväliitäntä (CGI)”).

CGI-renderöinti

Nyt voit tarkastella lähemmin kysymystä tietojen lähettämisestä verkkoselaimeen. Hei, maailma -esimerkistä näet, että verkkoselaimet odottavat kahta tietojoukkoa: otsikkoa, joka sisältää tietoja, kuten näytettävät tiedot (esim. Content-Type: rivi) ja todellisia tietoja (mitä verkkoselain näyttää). . Nämä kaksi tietoa on erotettu tyhjällä rivillä.

Otsikkoa kutsutaan HTTP-otsikoksi. Se antaa tärkeitä tietoja tiedoista, joita selain aikoo vastaanottaa. HTTP-otsikoita on useita erilaisia, ja yleisin on aiemmin käyttämäsi otsikko: Content-Type: header. Voit käyttää erilaisia ​​HTTP-otsikoiden yhdistelmiä, jotka erotetaan rivinvaihdolla ja rivinvaihdolla (\r\n). Otsikon tiedoista erottava tyhjä rivi koostuu myös rivinvaihdosta ja rivinvaihdosta (miksi molempia tarvitaan, käsitellään lyhyesti edellisessä huomautuksessa ja tarkemmin luvussa 4). Opit muista HTTP-otsikoista luvussa 4; Tällä hetkellä käsittelet Content-Type: otsikkoa.

Content-Type: Otsikko kuvaa CGI:n palauttamien tietojen tyyppiä. Tämän otsikon sopiva muoto on:

Sisältö-tyyppi: alatyyppi/tyyppi

Jos alatyyppi/tyyppi on oikea Multipurpose Internet Mail Extensions (MIME) -tyyppi. Yleisin MIME-tyyppi on HTML-tyyppi: text/html. Taulukossa 2.1 on lueteltu muutama yleisempi MIME-tyyppi, joista keskustellaan; Täydellisempi MIME-tyyppien luettelo ja analyysi on luvussa 4.

Huom

MIME keksittiin alun perin kuvaamaan sähköpostiviestien sisältöä. Siitä on tullut melko yleinen tapa esittää sisältötyyppisiä tietoja. Voit lukea lisää MIME:stä RFC1521:ssä. Internetin RFC:t ovat lyhenne sanoista Requests for Comments, jotka ovat tiivistelmiä päätöksistä, joita Internetissä tekevät ryhmät yrittävät asettaa standardeja. Voit tarkastella RFC1521:n tuloksia seuraavassa osoitteessa: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Taulukko 2.1. Jotkut yleiset MIME-tyypit. MIME-tyyppi Kuvaus Teksti/html Hypertext Markup Language (HTML) Teksti/pelkkä tekstitiedostot Kuva/gif Grafiikkatiedostot GIF Kuva/jpeg Pakatut grafiikkatiedostot JPEG Ääni/perusäänitiedostot Sun *.au Audio/x-wav Windows-tiedostot *

Otsikon ja tyhjän rivin jälkeen tulostat tiedot tarvitsemassasi muodossa. Jos lähetät HTML-koodia, tulosta HTML-tunnisteet ja tiedot stdout-tiedostoon otsikon jälkeen. Voit myös lähettää grafiikkaa, ääntä ja muita binääritiedostoja yksinkertaisesti tulostamalla tiedoston sisällön stdoutiin. Tästä on useita esimerkkejä luvussa 4.

CGI-ohjelman asentaminen ja suorittaminen

Tämä osio poikkeaa jonkin verran CGI-ohjelmoinnista ja puhuu Web-palvelimen määrittämisestä käyttämään CGI:tä, ohjelmien asentamisesta ja suorittamisesta. Tulet tutustumaan eri palvelimiin eri alustoille enemmän tai vähemmän yksityiskohtaisesti, mutta sinun on kaivettava palvelimesi dokumentaatiota syvemmälle löytääksesi parhaan vaihtoehdon.

Kaikki palvelimet vaativat tilaa palvelintiedostoille ja tilaa HTML-dokumenteille. Tässä kirjassa palvelinalueen nimi on ServerRoot ja dokumenttialueen nimi DocumentRoot. UNIX-koneissa ServerRoot on yleensä hakemistossa /usr/local/etc/httpd/ ja DocumentRoot on yleensä hakemistossa /usr/local/etc/httpd/htdocs/. Tämä ei kuitenkaan vaikuta järjestelmääsi, joten vaihda kaikki viittaukset ServerRoot- ja DocumentRoot-tiedostoihin omalla ServerRoot- ja DocumentRoot-palvelimella.

Kun käytät tiedostoja verkkoselaimella, määrität tiedoston URL-osoitteessa suhteessa DocumentRootiin. Jos palvelimesi osoite on esimerkiksi mymachine.org, voit käyttää tätä tiedostoa seuraavalla URL-osoitteella: http://mymachine.org/index.html

Palvelimen asetukset CGI:lle

Useimmat Web-palvelimet on valmiiksi määritetty sallimaan CGI-ohjelmien käyttö. Tyypillisesti kaksi parametria osoittavat palvelimelle, onko tiedosto CGI-sovellus vai ei:

  • Nimetty hakemisto. Jotkin palvelimet antavat sinun määrittää, että kaikki määritetyn hakemiston tiedostot (jota kutsutaan yleensä oletuksena cgi-biniksi) ovat CGI-tiedostoja.
  • Tiedostonimien laajennukset. Monilla palvelimilla on tämä esimääritys, joka sallii kaikkien .cgi-päätteisten tiedostojen määrittämisen CGI:ksi.

Nimetty hakemistomenetelmä on jäänne menneisyydestä (ensimmäiset palvelimet käyttivät sitä ainoana menetelmänä määrittää, mitkä tiedostot olivat CGI-ohjelmia), mutta sillä on useita etuja.

  • Se pitää CGI-ohjelmat keskitettynä ja estää muita hakemistoja sotkeutumasta.
  • Et ole rajoittunut mihinkään tiettyyn tiedostopäätteeseen, joten voit nimetä tiedostosi miten haluat. Jotkut palvelimet mahdollistavat useiden eri hakemistojen määrittämisen CGI-hakemistoiksi.
  • Sen avulla voit myös hallita paremmin, kuka voi tallentaa CGI:tä. Jos sinulla on esimerkiksi palvelin ja tuet järjestelmää, jossa on useita käyttäjiä, etkä halua heidän käyttävän omia CGI-komentosarjaansa tarkistamatta ensin ohjelmaa turvallisuussyistä, voit määrittää vain ne tiedostot rajoitetussa, keskitetyssä hakemistossa CGI:ksi. . Käyttäjien on sitten toimitettava sinulle CGI-ohjelmat asennettavaksi, ja voit ensin tarkastaa koodin varmistaaksesi, ettei ohjelmassa ole suuria tietoturvaongelmia.

CGI-merkintä tiedostotunnisteen kautta voi olla hyödyllinen joustavuuden vuoksi. Et ole rajoitettu yhteen CGI-ohjelmien hakemistoon. Useimmat palvelimet voidaan määrittää tunnistamaan CGI tiedostotunnisteen kautta, vaikka kaikki eivät ole oletuksena määritettyjä tällä tavalla.

Varoitus

Muista tietoturvaongelmien tärkeys, kun määrität palvelimesi CGI:tä varten. Tässä käsitellään joitain vinkkejä, ja luvussa 9, CGI:n suojaaminen, käsitellään näitä näkökohtia yksityiskohtaisemmin.

CGI:n asentaminen UNIX-palvelimiin

Riippumatta siitä, miten UNIX-palvelin on määritetty, sinun on suoritettava useita vaiheita varmistaaksesi, että CGI-sovelluksesi toimivat odotetulla tavalla. Web-palvelimesi toimii yleensä olemattomana käyttäjänä (eli UNIX-käyttäjänä ei kukaan – tili, jolla ei ole tiedostooikeuksia ja jota ei voida kirjautua sisään). CGI-skriptien (kirjoitettu Perlillä, Bourne-kuorella tai muulla komentosarjakielellä) on oltava suoritettavia ja luettavissa kaikkialla maailmassa.

Vihje

Voit tehdä tiedostoistasi maailmanlaajuisesti luettavia ja suoritettavia käyttämällä seuraavaa UNIX-käyttöoikeuskomentoa: chmod 755 filename.

Jos käytät käsikirjoituksen kuvauskieltä Perl tyyppi tai Tcl, anna tulkin koko polku komentosarjasi ensimmäiselle riville. Esimerkiksi Perl-komentosarja, joka käyttää perliä hakemistossa /usr/local/bin, alkaisi seuraavalla rivillä:

#!/usr/local/bin/perl

Varoitus

Älä koskaan sijoita tulkkia (perl tai Tcl Wish -binaari) /cgi-bin-hakemistoon. Tämä aiheuttaa järjestelmän turvallisuusriskin.

Jotkut yleiset UNIX-palvelimet

NCSA- ja Apache-palvelimilla on samanlaiset määritystiedostot, koska Apache-palvelin perustui alun perin NCSA-koodiin. Oletusarvoisesti ne on määritetty niin, että mikä tahansa tiedosto cgi-bin-hakemistossa (sijaitsee oletuksena ServerRootissa) on CGI-ohjelma. Voit muuttaa cgi-bin-hakemiston sijaintia muokkaamalla conf/srm.conf-määritystiedostoa. Tämän hakemiston määritysmuoto on

ScriptAlias fakedirectoryname real directoryname

jossa fakedirectoryname on pseudohakemiston nimi (/cgi-bin) ja realdirectoryname on täydellinen polku, johon CGI-ohjelmat todella on tallennettu. Voit määrittää useamman kuin yhden ScriptAlias-rivejä lisäämällä.

Oletuskokoonpano riittää useimpien käyttäjien tarpeisiin. Sinun on muokattava srm.conf-tiedoston riviä molemmissa tapauksissa oikean hakemiston nimen määrittämiseksi. Jos esimerkiksi CGI-ohjelmasi sijaitsevat hakemistossa /usr/local/etc/httpd/cgi-bin, srm.conf-tiedoston ScriptAlias-rivin pitäisi olla jotain tällaista:

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

Tässä hakemistossa olevien CGI-ohjelmien käyttämiseen tai niihin linkittämiseen käytetään seuraavaa URL-osoitetta:

Http://hostname/cgi-bin/ohjelmannimi

Jossa isäntänimi on Web-palvelimesi isännän nimi ja ohjelman nimi on CGI:n nimi.

Oletetaan esimerkiksi, että kopioit hello.cgi-ohjelman cgi-bin-hakemistoosi (esim. /usr/local/etc/httpd/cgi-bin) Web-palvelimellesi nimeltä www.company.com. Pääset CGI:hen käyttämällä seuraavaa URL-osoitetta: http://www.company.com/cgi-bin/hello.cgi

Jos haluat määrittää NCSA- tai Apache-palvelimesi tunnistamaan minkä tahansa .cgi-tunnisteisen tiedoston CGI:ksi, sinun on muokattava kahta asetustiedostoa. Poista ensin seuraavan rivin kommentit srm.conf-tiedostosta:

AddType-sovellus/x-httpd-cgi .cgi

Tämä yhdistää MIME-tyypin CGI:n .cgi-laajennukseen. Nyt meidän on muutettava access.conf-tiedostoa, jotta voimme suorittaa CGI:n missä tahansa hakemistossa. Voit tehdä tämän lisäämällä ExecCGI-vaihtoehdon Optio-riville. Se näyttää suunnilleen seuraavalta riviltä:

Vaihtoehtoindeksit FollowSymLinks ExecCGI

Nyt kaikki tiedostot, joiden tunniste on .cgi, katsotaan CGI:ksi. käyttää sitä samalla tavalla kuin mitä tahansa palvelimellasi olevaa tiedostoa.

CERN-palvelin on määritetty samalla tavalla kuin Apache- ja NCSA-palvelimet. ScriptAliasin sijaan CERN-palvelin käyttää Exec-komentoa. Esimerkiksi httpd.conf-tiedostossa näet seuraavan rivin:

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

Muut UNIX-palvelimet voidaan määrittää samalla tavalla; Tämä on kuvattu tarkemmin palvelimen dokumentaatiossa.

CGI:n asentaminen Windowsiin

Useimmat Windows 3.1-, Windows 95- ja Windows NT -käyttöjärjestelmille saatavilla olevat palvelimet on määritetty käyttämällä "tiedostonimen laajennus" -menetelmää CGI-tunnistukseen. Yleensä Windows-pohjaisen palvelimen kokoonpanon muuttaminen vaatii vain palvelimen määritysohjelman suorittamista ja tarvittavien muutosten tekemistä.

Joskus palvelimen määrittäminen suorittamaan komentosarja (kuten Perl) oikein voi olla vaikeaa. DOSissa tai Windowsissa et voi määrittää tulkkia komentosarjan ensimmäiselle riville, kuten UNIXissa. Joillakin palvelimilla on ennalta määritetty konfiguraatio tiettyjen tiedostonimien päätteiden liittämiseksi tulkkiin. Esimerkiksi monet Windowsin Web-palvelimet olettavat, että .pl-päätteiset tiedostot ovat Perl-komentosarjoja.

Jos palvelin ei suorita tämän tyyppistä tiedostojen yhdistämistä, voit määrittää pakettiohjelman, joka kutsuu sekä tulkin että komentosarjan. Kuten UNIX-palvelimessa, älä asenna tulkkia cgi-bin-hakemistoon tai mihinkään Web-hakemistoon.

CGI:n asentaminen Macintoshiin

Kaksi tunnetuinta Macintosh-palvelinvaihtoehtoa ovat WebStar StarNine ja sen edeltäjä MacHTTP. Molemmat tunnistavat CGI:n sen tiedostotunnisteen perusteella.

MacHTTP ymmärtää kahta eri laajennusta: .cgi ja .acgi, joka tarkoittaa asynkronista CGI:tä. Tavalliset Macintosh-tietokoneeseen asennetut CGI-ohjelmat (.cgi-laajennuksella) pitävät Web-palvelimen varattuna, kunnes CGI on käynnissä, jolloin palvelin keskeyttää kaikki muut pyynnöt. Asynkroninen CGI puolestaan ​​sallii palvelimen hyväksyä pyyntöjä, vaikka se on käynnissä.

CGI Macintosh -kehittäjän, joka käyttää mitä tahansa näistä Web-palvelimista, tulisi, jos mahdollista, käyttää vain .acgi-laajennusta .cgi-laajennuksen sijaan. Sen pitäisi toimia useimpien CGI-ohjelmien kanssa; jos se ei toimi, nimeä ohjelma uudelleen muotoon .cgi.

Suoritetaan CGI:tä

Kun olet asentanut CGI:n, voit suorittaa sen useilla tavoilla. Jos CGI-ohjelmasi on vain tulostusohjelma, kuten Hello,World!-ohjelma, voit suorittaa sen yksinkertaisesti käyttämällä sen URL-osoitetta.

Useimmat ohjelmat toimivat palvelinsovelluksena HTML-lomakkeella. Ennen kuin opit saamaan tietoa näistä lomakkeista, lue ensin lyhyt esittely tällaisten lomakkeiden luomisesta.

Nopea opetusohjelma HTML-lomakkeista

Kaksi tärkeintä tunnistetta HTML-muodossa ovat

Ja . Voit luoda useimpia HTML-lomakkeita käyttämällä vain näitä kahta tunnistetta. Tässä luvussa tutkit näitä tunnisteita ja pientä osajoukkoa mahdollisista tyypeistä tai määritteistä. . Täydellinen opas ja linkki HTML-lomakkeisiin on luvussa 3, HTML ja lomakkeet.

Tag

Tag käytetään määrittämään, mitä HTML-tiedoston osaa tulee käyttää käyttäjän syöttämille tiedoille. Tämä viittaa siihen, kuinka useimmat HTML-sivut kutsuvat CGI ohjelma. Tag-attribuutit määrittävät ohjelman nimen ja sijainnin - joko paikallisesti tai täydellisenä URL-osoitteena, käytetyn koodaustyypin ja ohjelman käyttämän tiedonsiirtomenetelmän.

Seuraava rivi näyttää tunnisteen tekniset tiedot :

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

ENCTYPE-attribuutilla ei ole erityistä roolia, eikä sitä yleensä sisälly tunnisteeseen . Yksityiskohtaiset tiedot ENCTYPE-tunnisteen osalta on kerrottu luvussa 3. Yksi tapa käyttää ENCTYPE on esitetty luvussa 14, "Brändilaajennukset".

ACTION-attribuutti viittaa CGI-ohjelman URL-osoitteeseen. Kun käyttäjä täyttää lomakkeen ja antaa tiedot, kaikki tiedot koodataan ja siirretään CGI-ohjelmaan. CGI-ohjelma itse ratkaisee tiedon dekoodauksen ja käsittelyn ongelman; Tätä näkökohtaa käsitellään myöhemmin tässä luvussa kohdassa "Syötteiden hyväksyminen selaimesta".

Lopuksi METHOD-attribuutti kuvaa, kuinka CGI-ohjelman tulee vastaanottaa syöte. Nämä kaksi menetelmää, GET ja POST, eroavat toisistaan ​​siinä, miten ne välittävät tietoja CGI-ohjelmalle. Molempia käsitellään kohdassa "Syötteiden hyväksyminen selaimesta".

Jotta selain sallii käyttäjän syöttämisen, kaikki lomaketunnisteet ja tiedot on ympäröitävä tunnisteella . Älä unohda sulkevaa tagia

ilmaisemaan lomakkeen lopun. Lomakkeessa ei voi olla lomaketta, mutta voit määrittää lomakkeen, jonka avulla voit esittää tietoja eri paikoissa. Tätä näkökohtaa käsitellään laajasti luvussa 3.

Tag

Voit luoda tekstinsyöttöpalkkeja, valintanappeja, valintaruutuja ja muita tapoja hyväksyä syötettä käyttämällä tunnistetta . IN tämä osio vain kentät huomioidaan tekstinsyöttö. Käytä tagia tämän kentän toteuttamiseksi seuraavilla ominaisuuksilla:

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

NAME on symbolinen nimi muuttujalle, joka sisältää käyttäjän syöttämän arvon. Jos lisäät tekstiä attribuutissa VALUE, se sijoitetaan oletusarvoisesti tekstinsyöttökenttään. SIZE-määritteen avulla voit määrittää syöttökentän vaakasuuntaisen pituuden sellaisena kuin se näkyy selainikkunassa. Lopuksi MAXLENGTH määrittelee enimmäismäärä merkit, jotka käyttäjä voi syöttää kenttään. Huomaa, että määritteet VALUE, SIZE, MAXLENGTH ovat valinnaisia.

Lomakkeen lähetys

Jos lomakkeessa on vain yksi tekstikenttä, käyttäjä voi lähettää lomakkeen kirjoittamalla tiedot näppäimistöllä ja painamalla Enter. Muussa tapauksessa käyttäjällä on oltava jokin muu tapa esittää tiedot. Käyttäjä lähettää tiedot käyttämällä lähetyspainiketta, jossa on seuraava tunniste:

< Input type=submit >

Tämä tunniste luo lomakkeen sisään Lähetä-painikkeen. Kun käyttäjä on täyttänyt lomakkeen, hän voi lähettää sen sisällön kautta URL-osoite, määritelty ACTION-attribuutti Lomake napsauttamalla Lähetä-painiketta.

Hyväksytään selaimen syöte

Yllä oli esimerkkejä CGI-ohjelman tallentamisesta, joka lähettää tietoja palvelimelta selaimeen. Todellisuudessa vain dataa tulostavalla CGI-ohjelmalla ei ole monia sovelluksia (joitakin esimerkkejä on luvussa 4). CGI:n tärkeämpi kyky on vastaanottaa tietoa selaimelta - ominaisuus, joka antaa Webille sen interaktiivisen luonteen.

CGI-ohjelma vastaanottaa kahdenlaisia ​​tietoja selaimesta.

  • Ensinnäkin se hankkii erilaisia ​​tietoja selaimesta (sen tyypistä, mitä se voi tarkastella, isäntäkoneesta ja niin edelleen), palvelimesta (sen nimi ja versio, sen suoritusportti ja niin edelleen) ja CGI-ohjelmasta. itse (ohjelman nimi ja missä se sijaitsee). Palvelin antaa kaiken tämän tiedon CGI-ohjelmalle ympäristömuuttujien kautta.
  • Toiseksi CGI-ohjelma voi vastaanottaa käyttäjän syötteitä. Nämä tiedot lähetetään selaimen koodauksen jälkeen joko ympäristömuuttujan (GET-menetelmä) tai vakiosyötteen (stdin - POST-menetelmä) kautta.

Ympäristömuuttujat

On hyödyllistä tietää, mitä ympäristömuuttujia CGI-ohjelmalla on käytettävissä sekä harjoituksen aikana että virheenkorjauksessa. Taulukossa 2.2 on lueteltu joitain käytettävissä olevia CGI-ympäristömuuttujia. Voit myös kirjoittaa CGI-ohjelman, joka tulostaa ympäristömuuttujat ja niiden arvot verkkoselaimeen.

Taulukko 2.2. Joitakin tärkeitä CGI-ympäristömuuttujia Ympäristömuuttuja Tarkoitus REMOTE_ADDR Asiakaskoneen IP-osoite. REMOTE_HOST Asiakaskoneen isäntä. HTTP _ACCEPT Luetteloi MIME-tietotyypit, jotka selain voi tulkita. HTTP _USER_AGENT Selaintiedot (selaimen tyyppi, versionumero, käyttöjärjestelmä jne.). REQUEST_METHOD HANKI tai LÄHETÄ. CONTENT_LENGTH Syötteen koko, jos se lähetetään POST:n kautta. Jos syötettä ei ole tai jos käytetään GET-menetelmää, tämä parametri on määrittelemätön. QUERY_STRING Sisältää syötetiedot, kun se välitetään GET-menetelmällä. PATH_INFO Antaa käyttäjän määrittää polun CGI-komentoriviltä (esimerkiksi http://hostname/cgi-bin/ohjelmannimi/polku). PATH_TRANSLATED Käännökset suhteellinen polku

PATH_INFO:ssa järjestelmän todelliseen polkuun.

  • Jos haluat kirjoittaa ympäristömuuttujia näyttävän CGI-sovelluksen, sinun on tiedettävä kaksi asiaa:
  • Määritä kaikki ympäristömuuttujat ja niitä vastaavat arvot.

Tulosta tulokset selaimeen. Tiedät jo, kuinka viimeinen toimenpide suoritetaan. Perlissä ympäristömuuttujat tallennetaan assosiatiiviseen taulukkoon %ENV, joka johdetaan nimellä ympäristömuuttuja

. Listaus 2.3 sisältää env.cgi:n, Perl-ohjelman, joka saavuttaa tavoitteemme. Listaus 2.3. Perl ohjelma

env.cgi, joka tulostaa kaikki CGI-ympäristömuuttujat. \n"; tulosta" #!/usr/local/bin/perl print "Content-type: text/html\n\n"; tulosta"\n"; tulosta"\n"; tulosta" \n"; tulosta"

#!/usr/local/bin/perl print "Content-type: text/html\n\n"; tulosta"

CGI-ympäristö \n"; foreach $env_var (avaimet %ENV) ( print "$env_var
= $ENV($env_var)

\n";

\n"; ) tulosta " Samanlainen ohjelma voitaisiin kirjoittaa C:llä; täysi koodi

on listauksessa 2.4. Listaus 2.4. Env.cgi.c C. /* env.cgi.c */ #include \n"); printf(" #!/usr/local/bin/perl print "Content-type: text/html\n\n"; tulosta"\n"); printf("\n"); printf(" \n"); printf("

#!/usr/local/bin/perl print "Content-type: text/html\n\n"; tulosta"

ulkoinen merkki **ympäristö; int main() ( char **p = ympäristö; printf("Sisältötyyppi: text/html\r\n\r\n"); printf("
\n"); while(*p != NULL) printf("%s

\n");)

\n",*p++); printf("

HANKI vai LÄHETÄ? Mitä eroa on GET- ja POST-menetelmillä? GET välittää koodatun syöttömerkkijonon ympäristömuuttujan QUERY_STRING kautta, kun taas POST välittää sen stdin:n kautta. POST on suositeltava menetelmä, erityisesti lomakkeille, joissa on suuri määrä tietoja, koska lähetettävän tiedon määrälle ja milloin ei ole rajoituksia GET-menetelmä ympäristötilan määrä on rajallinen. GET on kuitenkin varma hyödyllinen omaisuus

; tätä käsitellään yksityiskohtaisesti luvussa 5, Syöte.

Määrittääkseen, mitä menetelmää käytetään, CGI-ohjelma tarkistaa ympäristömuuttujan REQUEST_METHOD, jonka arvoksi asetetaan joko GET tai POST. Jos se on asetettu arvoon POST, koodatun tiedon pituus tallennetaan ympäristömuuttujaan CONTENT_LENGTH.

Koodattu tulo , jokaiselle kentälle annetaan symbolinen nimi. Käyttäjän syöttämä arvo esitetään muuttujan arvona.

Tämän määrittämiseksi selain käyttää URL-koodausspesifikaatiota, joka voidaan kuvata seuraavasti:

  • Erottelee eri kentät et-merkillä (&).
  • Erottelee nimen ja arvot yhtäläisyysmerkeillä (=), jolloin nimi on vasemmalla ja arvo oikealla.
  • Korvaa välilyönnit plusmerkeillä (+).
  • Korvaa kaikki "epänormaalit" merkit prosenttimerkillä (%), jota seuraa kaksinumeroinen numero heksadesimaalikoodi symboli.

Lopullinen koodattu merkkijonosi on seuraavanlainen:

Nimi1=arvo1&nimi2=arvo2&nimi3=arvo3 ...

Huomautus: URL-koodauksen tiedot löytyvät RFC1738:sta.

Oletetaan esimerkiksi, että sinulla oli lomake, joka kysyi nimeä ja ikää. Tämän lomakkeen näyttämiseen käytetty HTML-koodi on esitetty luettelossa 2.5.

Listaus 2.5. HTML-koodi, joka näyttää nimen ja ikälomakkeen.

Nimi ja ikä

Kirjoita nimesi:

Anna ikäsi:



Oletetaan, että käyttäjä kirjoittaa Joe Schmoe nimikenttään ja 20 ikäkenttään. Tulo koodataan syötemerkkijonoon.

Nimi=Joe+Schmoe&age=20

Jäsennyssyöttö

Jotta nämä tiedot olisivat hyödyllisiä, sinun on käytettävä tietoja johonkin, jota CGI-ohjelmasi voivat käyttää. Syötteen jäsennysstrategiat käsitellään luvussa 5. Käytännössä sinun ei koskaan tarvitse miettiä syötteen jäsentämistä, koska useat asiantuntijat ovat jo kirjoittaneet jäsentämisen suorittavia kirjastoja, jotka ovat kaikkien saatavilla. Kaksi tällaista kirjastoa esitellään tässä luvussa seuraavissa osioissa: cgi -lib.pl Perlille (kirjoittanut Steve Brenner) ja cgihtml C:lle (kirjoitin minä).

Useimpien eri kielillä kirjoitettujen kirjastojen yleinen tavoite on jäsentää koodattu merkkijono ja laittaa nimi- ja arvoparit tietorakenteeseen. On selvää etua käyttää kieltä, jossa on sisäänrakennetut tietorakenteet, kuten Perl; kuitenkin useimmat kielikirjastot alempi taso Tyyppi C ja C++ sisältää tietorakenteiden ja rutiinien suorittamisen.

Ei ole välttämätöntä saavuttaa täydellistä ymmärrystä kirjastoista; on paljon tärkeämpää oppia käyttämään niitä työkaluja helpottaa CGI-ohjelmoijan työtä.

Cgi-lib.pl

Cgi-lib.pl käyttää Perl-assosiatiivisia taulukoita. &ReadParse-funktio jäsentää syötemerkkijonon ja syöttää jokaisen nimi/arvo-parin nimen mukaan. Esimerkiksi vastaava Perl kielet, jota tarvitaan juuri esitetyn "nimi/ikä" -syötemerkkijonon purkamiseen

&ReadParse(*input);

Nyt voit nähdä "name"-arvon syöttämän arvon assosiatiivinen matriisi$input("nimi"). Vastaavasti "age"-arvon saamiseksi sinun on katsottava muuttujaa $input ("age").

Cgihtml

C:ssä ei ole sisäänrakennettuja tietorakenteita, joten cgihtml tekee oman asiansa oma lista yhteydet käytettäväksi CGI-jäsennysrutiinien kanssa. Tämä määrittää merkintätyypin rakenteen seuraavasti:

Typedef struct ( Char *nimi; Char *arvo; ) Merkintätyyppi;

Syöttömerkkijonon "nimi/ikä" jäsentämiseksi C:ssä cgihtml:llä käytetään seuraavaa:

/* julistaa linkitetty lista, jota kutsutaan syötteeksi */ Llist input; /* jäsentää syötettä ja sijaintia linkitetyssä luettelossa */ read_cgi_input(&input);

Ikätietoihin pääsemiseksi voit joko jäsentää luettelon manuaalisesti tai käyttää käytettävissä olevaa cgi _val() -funktiota.

#sisältää #sisältää Merkki *ikä = malloc(koko(merkki)*strlen(cgi_val(syöttö, "ikä")) + 1); Strcpy(ikä, cgi_val(syöttö, "ikä"));

"Ige"-arvo on nyt tallennettu ikämerkkijonoon.

Huomautus: käyttämisen sijaan yksinkertainen joukko(kuten char age ;), teen dynaaminen jakelu muistitilaa jousikaudelle. Vaikka tämä vaikeuttaa ohjelmointia, se on kuitenkin tärkeää turvallisuuden kannalta. Tätä käsitellään tarkemmin luvussa 9.

Yksinkertainen CGI-ohjelma

Aiot kirjoittaa CGI-ohjelman nimeltä nameage.cgi, joka käsittelee nimi/ikä -muotoa. Tietojen käsittely (mitä yleensä kutsun "tavaraksi") on minimaalista. Nameage.cgi yksinkertaisesti purkaa syötteen ja näyttää käyttäjän nimen ja iän. Vaikka tällaiselle työkalulle ei ole paljon hyötyä, se osoittaa CGI-ohjelmoinnin kriittisimmän puolen: tulon ja lähdön.

Käytät samaa lomaketta kuin yllä, kutsuen "nimi ja ikä" -kentät. Älä vielä ole huolissasi kestävyydestä ja tehokkuudesta; ratkaista olemassa oleva ongelma yksinkertaisimmalla tavalla. Perl- ja C-ratkaisut on esitetty luetteloissa 2.6 ja 2.7.

Listaus 2.6. Nameage.cgi Perlissä

#!/usr/local/bin/perl # nameage.cgi vaatii "cgi-lib.pl" &ReadParse(*input); tulosta "Content-Type: text/html\r\n\r\n"; tulosta" \n"; tulosta" Nimi ja ikä\n"; tulosta"\n"; tulosta" \n"; tulosta "Hei, " . $input("nimi") . ". Olet\n"; print $input("age") . " vuotta vanha.

\n"; tulosta"

\n";

Listaus 2.7. nameage.cgi C:ssä

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( listin syöttö; read_cgi_input(&input); printf("Sisältötyyppi: text/html\r\n\r\n"); printf(" \n"); printf(" Nimi ja ikä\n"); printf("\n"); printf(" \n"); printf("Hei, %s. Olet\n",cgi_val(input,"nimi")); printf("%s vuotta vanha.

\n",cgi_val(syöttö"ikä")); printf("

\n");)

Huomaa, että nämä kaksi ohjelmaa ovat lähes samanarvoisia. Molemmat sisältävät jäsennysrutiineja, jotka vievät vain yhden rivin ja käsittelevät koko syötteen (vastaavien kirjastorutiinien ansiosta). Tulos on olennaisesti muokattu versio Hello, World! -ohjelmastasi.

Yritä suorittaa ohjelma täyttämällä lomake ja napsauttamalla Lähetä-painiketta.

Yleinen ohjelmointistrategia

Tiedät nyt kaikki CGI-ohjelmoinnin perusperiaatteet. Kun ymmärrät kuinka CGI vastaanottaa tiedot ja kuinka se lähettää ne takaisin selaimeen, lopputuotteesi todellinen laatu riippuu yleisistä ohjelmointikyvyistäsi. Nimittäin, kun ohjelmoit CGI:tä (tai mitä tahansa, siinä tapauksessa), pidä seuraavat ominaisuudet mielessä:

  • Yksinkertaisuus
  • Tehokkuus
  • Monipuolisuus

Kaksi ensimmäistä ominaisuutta ovat melko yleisiä: yritä tehdä koodistasi mahdollisimman luettava ja tehokas. Monipuolisuus koskee enemmän CGI-ohjelmia kuin muita sovelluksia. Kun alat kehittää omaa omia ohjelmia CGI, opit, että on olemassa useita perussovelluksia, joita kaikki haluavat tehdä. Esimerkiksi yksi CGI-ohjelman yleisimmistä ja ilmeisimmistä tehtävistä on käsitellä lomake ja lähettää tulokset sähköpostitse tietylle vastaanottajalle. Voit käsitellä useita erillisiä lomakkeita, joista jokaisella on eri vastaanottaja. Sen sijaan, että kirjoittaisit CGI-ohjelman jokaiselle yksittäiselle lomakkeelle, voit säästää aikaa kirjoittamalla lisää yleinen ohjelma CGI, joka toimii kaikissa muodoissa.

Käsittelemällä kaikki CGI:n perusasiat olen antanut sinulle tarpeeksi tietoa CGI-ohjelmoinnin aloittamiseen. Tehokas CGI-kehittäjä edellyttää kuitenkin syvempää ymmärrystä siitä, kuinka CGI kommunikoi palvelimen ja selaimen kanssa. Tämän kirjan loppuosa kattaa yksityiskohtaisesti tässä luvussa lyhyesti mainitut asiat sekä sovelluskehitysstrategian ja protokollan edut ja rajoitukset.

Jatkaa

Tässä luvussa esitellään lyhyesti CGI-ohjelmoinnin perusteet. Luot tulosteen muotoilemalla tiedot oikein ja tulostamalla stdout-muotoon. CGI-syötteen vastaanottaminen on hieman monimutkaisempaa, koska se on jäsennettävä ennen kuin sitä voidaan käyttää. Onneksi on jo olemassa useita jäsentämistä suorittavia kirjastoja.

TO tällä hetkellä Sinun pitäisi pystyä perehtymään CGI-sovellusten ohjelmointiin melko helposti. Tämän kirjan loppuosassa käsitellään yksityiskohtaisemmin spesifikaatioita, vinkkejä ja ohjelmointistrategioita edistyneempiä ja monimutkaisempia sovelluksia varten.