|
I begynnelsen var det kun leselenker på weben til statiske noder, altså webserveren returnerte kun filer til nettleseren. En så raskt nytten av søke- og oppdaterings-lenker samt dynamiske noder. Dynamiske noder er programmer som startes av webserveren. Nettleseren kan i søke- og oppdaterings-lenker sende med tilleggsopplysninger til webserveren. Disse data bør webserveren gjøre tilgjengelig for programmet i noden. For å sikre portabiliteten til programmene i de dynamiske nodene var det behov for en standardisert grenesnitt mot webserverene. NCSA (National Center for Supercomputing Applications), som skrev forløperen til Apache-serveren, definerte CGI (Commen Gateway Interface). CGI spesifikasjoneen er tilgjengelig på http://hoohoo.ncsa.uiuc.edu/cgi/. CGI er en standard for kommunikasjon mellom webserver og programmer. Det er fire måter CGI formidler informasjon mellom webserver og programmer:
- environment-variabler
- kommandolinje parameter
- standard input
- standard output
De tre første metodene benytter webserveren for å sende informasjon til CGI-programmet. Den fjerde metoden benytter CGI-programmer for å sende data tilbake til webserveren. CGI-programmer kan altså kun sende data til webserveren via standard-output.
I beskrivelsen av weben som en nodenettverk ble lenker delt opp i tre typer: lese-, søke- og oppdaterings-lenker. De tre lenketypene er implementert i HTTP-protokollen ved metodene GET og POST. Lese- og søke-lenker er basert på GET-request og oppdaterings-lenker er basert på POST-request. Klienten kan i søke- og oppdaterings-lenker sende med tilleggsopplysninger. Disse er derfor mest aktuelle i forbindelse med webserver-programmering. I søke lenker blir tilleggsinformasjonen sendt som en søkestreng som postfikses til URL'en. I henhold til HTTP-spesifikasjonen må webserverene kunne håndtere minimum 256 byte lang URL (inklusiv søkestreng), men alle vanlige webservere håndterer mye lengre URL enn dette. Skal større mengde data sende til webserverprogram bør oppdateringslenker benyttes. Fordelen med søke-lenker er at disse kan lagres som bokmerker.
Avhengig av lenketype vil webserveren gjøre tilleggsopplysningen tilgjengelig på ulike måter for CGI-programmet. Ved bruk av søke-lenker vil tilleggsopplysningene plasseres i environment-variablen QUERY_STRING. Ved bruk av oppdaterings-lenker vil tilleggsopplysningene være tilgjengelig via standard input (stdin).
Innholdet i QUERY_STRING består av recorder med to felt. Hver record er separert med og-tegnet &. Hvert felt er separert med likhets-tegnet = tegn. Alle mellomrom i strengen er erstattet av pluss-tegnet +. De fleste ikke engelske alfanummeriske tegn er representert med heksadesimal verdi. Heksadesimale verdier er prefikset med prosent-tegnet %. Environment-variabler er behandlet i eget kapittel nedenfor.
Webserver gir kun kommandolinje parameter til CGI-programmer når QUERY_STRING ikke inneholder likhetstegn. I HTML er det kun ISINDEX-elementet som gir mulighet for dette (elementetet er på vei ut av HTML-spesifikasjonene).
De ulike språk en benytter til webserver-programmering har noe ulike grenesnitt for hvordan environment-variabler og andre request-opplysniger kan kan aksesseres.
Webserver-programmer
Webserver-programmer kan i prinsippet skrives i de fleste programmerings-språk. Ulike webservere har ulik støtte for ulike programmerings-spåk. I Barken kan en montere inn Tomcat-server som støtter .jsp og servlet som kan skrives i java, en kan montere inn Zope-server som støtter zope-programmer eller Apache-server med spesielle støtte for perl, python og php.
Apache serveren kan også kjøre alle eksiverbare programmer og skript som har filekstensjon .cgi. Programmene bør kompileres i Barken og dermed begrenser antall språk seg til hvilke kompilator en har tilgjengelig i Barken, dette er i hovedsak gcc (c++ kompilatoren). Barken er i tillegg utstyrt med mange skript-intepretere. Første linje i skriptet må angi hvilken intepreter som skal kjøre skriptet. Her følger en liste over tilgjengelige intepretere og hvilket direktiv som må oppgis på første linjen i skriptet:
| Intepreter |
Direktiv |
| Bourne-shell |
#! /bin/sh |
| C-shell |
#! /bin/csh |
| Bash-shell |
#! /usr/local/bin/bash |
| Z-shell |
#! /usr/local/bin/zsh |
| Perl |
#! /usr/local/bin/perl |
| Python |
#! /usr/local/bin/python |
| Jython |
#! /usr/local/bin/jython |
Fil-ekstensjoner, fil-rettigheter, fil-aksess metoder og plassering av filer i Barken.
Filene må ha følgende ekstensjoner, rettigheter og plassering for å bli korrekt behandlet av webserveren:
Server programmer |
Filekstensjon |
Filrettigheter*) |
Mulige request metoder |
Forklaring |
| (ingen) |
.html .htm |
644 |
GET HEAD |
Filen kan befinner seg hvor som helst i din web-katalog. Alle brukere på maskinen må ha leserettigheter til filen. Webserven vil på raskeste måte sendes filen til nettleseren. PHP-kode eller SSI-direktiver i filen vil ikke bli behandlet av serveren |
| CGI-skript |
.cgi |
700**) |
GET POST HEAD |
Filen kan befinner seg hvor som helst i din web-katalog. Våre webservere kjører skriptet med dine rettigheter på maskinen. Dette betyr at at du m&airng; ha kjørerettigheter på filen. Sett derfor filrettighetene til 700 på alle dine CGI-skript. Første linjen i skriptet bestemmer hvilken intepreter (bourne, perl, python, etc) som skal benyttes til kjøre skriptet. |
| SSI |
.shtml |
644***) |
GET HEAD |
Filen kan befinner seg hvor som helst i din web-katalog. Webserven vil lese .shtml-filen med dine rettigheter, slik det kun er nødvendig at du har leseaksess til selve filen. Default filrettigheter kan benyttes. Webserveren vil utføre SSI-direktiver med dine brukerrettigheter, slik at kun skript og kommandoer som du har kjøre rettighteter til kan utføres. |
| Perl |
.pl |
700**) |
GET POST HEAD |
Filen kan befinner seg hvor som helst i din web-katalog. Webserveren vil kjører Perl-skriptet med dine rettigheter. Dette betyr at du må ha kjørerettigheter på filen. Sett derfor filrettighetene til 700 på alle dine Perl-skript. Perl-kode i .pl-filer trenger ikke starte med direktivet: #! /usr/local/bin/perl
|
| Python |
.py |
700**) |
GET POST HEAD |
Filen kan befinner seg hvor som helst i din web-katalog. Webserveren vil kjører Python-skriptet med dine rettigheter. Dette betyr at du må ha kjørerettigheter på filen. Sett derfor filrettighetene til 700 på alle dine Python-skript. Python-kode i .py-filer trenger ikke starte med direktivet: #! /usr/local/bin/python |
| PHP4 |
.php |
644 |
GET POST HEAD |
Filen kan befinner seg hvor som helst i din web-katalog. Webserven vil lese PHP-koden med dine rettigheter, slik det kun er nødvendig at du har leseaksess til selve .php-filen. Default filrettigheter kan benyttes. |
| JSP |
.jsp |
644 |
GET POST HEAD |
Filen må befinne seg hvor som helst i din web-katalog. Webserven vil utføre JSP-koden i filen |
| Servlet |
.class |
644 |
GET POST HEAD |
Filenen kan lagres i din webapps/WEB-INF/classes-katalog (vi har installert på området ditt). Se omtale i "Servlet"-boken (i denne boken) for aksess av klasse-filer. |
*) Se omtale av FTP- og SSH-protkollen for forklaring på filrettigheter og hvordan disse settes.
**) Katalogen til skriptet eller en foreldre-katalog må innholde en fil med navnet .htaccess (dot-htaccess) som har følgende linje:
Options ExecCGI
***) Katalogen til skriptet eller en foreldre-katalog må innholde en fil med navnet .htaccess (dot_htaccess) som har følgende linje:
Options +Includes
Krav til utsendelse av hodefelt
Utsendelse av hodefelt sørger i de fleste tilfeller webserveren automatisk for med unntak av CGI-, Perl- og Python-skript samt servlet. For skriptenes vedkommende er utsendelse avhengig av aksess metode. I de tre førte aksessmetodene nedenfor må skriptet selv sende ut hodefelt:
- URL til skriptet skrives i adressefeltet i nettleseren
- URL til skriptet oppgis i link- eller form-element i HTML, XHTML, XML
- CGI-aksess via SSI-direktiv (f.eks: <!--exec cgi="script.cgi" -->)
- Kommando aksess via SSI-direktivet (f.eks: <!--exec cmd="script.sh" -->)
Obligatorisk hodefelt er "Content-Type:". Hodefeltene må være separert fra resten av innholdet med en blank linje.
|