Kapitel 4 - WWW

4.1 CGIwrap, vad är det?
CGIwrap är ett program som används för att köra CGI skript på Algonet. I och med att alla skript körs via cgiwrappern så kan skripten göra precis allting som ni kan göra på erat konto, samt att man inte behöver ha CGI skripten läsbara för alla. Om ni t.ex. har användarnamnet kalle och vill starta skriptet test.pl så anger ni följande URL:

http://cgi.algonet.se/htbin/cgiwrap/kalle/test.pl

Notera att ni skall använda cgi.algonet.se och inte www.algonet.se här.

Filen test.pl skall ligga i ~/public_html/cgi-bin/ katalogen.


4.2 Hur kör man skript på Algonet?
För att starta ett CGI skript använder man CGIwrappern. Detta finns beskrivet i avsnittet ovan.


4.3 Var kan jag hitta färdiga skript till min hemsida?
Ett ställe som har mycket bra Perlskript är Matt's Script Archive. Där finns bl.a. FormMail (skicka mail) och en gästbok. Ett annat bra ställe som man kan leta på är CGI-resources. Conny Magnusson har även tipsat om FreeCode.


4.4 Finns det skript som är färdiggjorda för Algonet?
Ja, Algonet har lagt in några som man kan använda, t.ex. FormMail. Då kan man dock inte ändra i dem själv, så det bästa är nog att gå till Joacim Järkeborns sida med fixade skript. Han har fixat de vanligaste Perlskripten så att de fungerar på Algonet. Sidan ni kommer till är inte Joacims hemsida, då han tyvärr avslutat sitt konto på Algonet. Jag har dock fått tillstånd att använda hans sida och modifierade skript till FAQ:en, och har nu lagt upp en kopia av dem.


4.5 Vadå kakor, vad är det, och vad har man dem till?
Vad är cookies?

Cookies är en liten mängd information som lagras på i din dator och ibland på din hårddisk. Informationen kan innehålla vad som helst, dock max c:a 2 KB information. Cookies kan skapas och modifieras av såväl CGI-program, Java-applets som JavaScript.

Varför använder man cookies?

"Problemet" med traditionell webbteknik är att varje anrop från en webbläsare till en webbserver uppfattas av servern som om anropet kommer från en ny besökare. Det fanns tidigare ingen möjlighet att särskilja användare som besökt webbplatsen tidigare från förstagångsbesökare, inte ens om anropen sker med bara några minuters mellanrum. Med hjälp av cookies kan man spara information mellan besöken, oftast någon form av besökarnummer eller helt enkelt bara en uppgift om när senaste besöket skedde.

Sparas cookies på min hårddisk?

Det finns två sätt att sända en cookie till din webbläsare, antingen tillsammans med en "sista förbrukningsdag", dvs efter detta datum tas cookien bort. När man använder denna metod så sparas cookien på din hårddisk i samband med att du avslutar din webbläsare. Om man inte skickar med något "sista förbrukningsdatum" så sparas inget på din hårddisk. Cookien och dess värde raderas då helt när du avslutar din webbläsare.

Vilka använder cookies?

Det kanske vanligaste användningsområdet för cookies är webbannonser. När annonsbilden skickas till din webbläsare så skickas även ett värde som berättar vilken annons som visas. När du sedan klickar på annonsen så läses värdet i din cookie och du styrs till rätt sida. Cookies används även ibland av webbshopping-system för att hålla reda på vad du handlat. Punkt.se använder t.ex. cookies för att välkomna tidigare (och registerade) besökare med namn.

Är cookies ofarligt?

Här finns det väl egentligen två frågeställningar som är intressanta, nämligen:

Kan jag stänga av cookies?

Ja, det kan du både i Nescape Navigator och MS Internet Explorer. Hur du gör beror på vilken läsare och version du använder. Besök manualen till din webbläsare för mer information.

Var kan jag hitta mer information om cookies?

Det finns flera ställen, bl.a. har The CGI Resource Index en sida på:

http://www.cgi-resources.com/Documentation/HTTP_Cookies/

Här följer lite andra länkar:

Cookie Central
Microsoft Cookie information
Netscape Cookie information
Webcrawler Cookie information

- Skrivet av Pär Abrahamsson


4.6 SSI, vad är det?
SSI står för Server Side Include, och är ett sätt att dynamiskt stoppa in text i ett HTML dokument eller köra ett kommando. Det kan röra sig om t.ex. den lokala tiden eller datumet på de senaste ändringarna. SSI skrivs som osynliga kommentarer, dvs mellan:

<!--#kommando tag1="värde1" tag2="värde2" -->

Inte alla leverantörer ger sina kunder tillgång till SSI p.g.a. en viss säkerhetsrisk. Inte heller alla SSI kommando tillåts. Om så är fallet kan dessa kommandon inkluderas i ett skript som kopplas till dokumentet eller genom att skapa ett dynamiskt dokument, dvs ett dokument som genereras av ett skript.

Mer information om SSI och dess kommandon hittar du på Eva von Pepels hemsida:

http://www.algonet.se/~eva/ref/html/ssi.html

Algonet har nu aktiverat SSI på http://www.algonet.se/. Alla kommandon utom #exec fungerar. Anledningen till att #exec inte tillåts är att det finns risk för säkerhetshål när man använder det, och därför har Algonet valt att inte aktivera det. SSI fungerar dock enbart för vanliga kunder än så länge, och alltså inte för domänkunder. Om en domänkund vill använda SSI måste denne anropa sidorna med http://www.algonet.se/~KONTO, där KONTO är namnet på det konto som domänen ligger på.

Denna del är hämtad från Eva von Pepels hemsida.


4.7 Vad är skillnaden mellan POST och GET?
Det finns två sätt att skicka parametrar från ett HTML formulär till ett CGI skript, POST och GET. Skillnaden mellan dessa är att när man använder POST så skickas parameterarna som en lång sträng via stdin till CGI skriptet. När man använder GET så får man alla parametrarna som en lång sträng i environmentvariabeln QUERY_STRING, där varje parameter är åtskiljd av ett & tecken. Mellanslag i olika fält ersätts med ett + tecken och specialtecken skrivs hexkodade. Hexkodade värden skrivs som %[HEX värde][HEX värde], där HEX värde är ett hexadecimalt värde, dvs 0-9,A-F. T.ex. skrivs ~ som %7E. Varje parameter skrivs som:

attribut=värde

Om man t.ex. har en parameter som heter telefon och den har värdet 123456 så får man:

telefon=123456


4.8 Vanliga CGIwrap felmeddelanden
Ett vanligt felmeddelande är:

CGIwrap Error: System Error: execv() failed
Error: No such file or directory (2)

Felet betyder att CGIwrap (egentligen execv() systemanropet i UNIX kärnan om vi skall vara noga) inte hittar den specificerade skript intepretatorn. Det betyder att den första raden i ditt skript är felaktig. Den första raden skall börja med #! samt den absoluta sökvägen till skript intepretatorn. T.ex:

#!/usr/bin/perl

Ett vanlig orsak är att man har laddad upp filen via FTP från DOS/Windows i BINARY mode och då fått ett osynligt carriage return (CR, ASCII 13, \r) tecken på slutet av raden som då kommer att tolkas av Unix systemet som en del av filnamnet på skript intepretatorn. Använd exempelvis följande Unix kommando för att kolla om det finns ett \r (CR) tecken i slutet av raden:

head -1 SKRIPTFILNAMN | od -c

Orsak nummer två är att du har stavat fel eller inte angivit korrekt absolut sökväg till skript intepretatorn.

Ett annat vanligt felmeddelande är:

CGIwrap Error: System Error: execv() failed
Error: Exec format error (8)

Det betyder att du har en satt exekveringsrättigheter på skriptet (vilket är helt rätt) men att systemet inte känner till formatet på den exekverbara filen. Om det är ett skript du försöker exekvera så måste den första raden börja med tecknena #!, vilket är ett så kallat magisk nummer för skript (dvs de tecknena talar om att det är ett skript). Felet uppkommer alltså när filen du försöker exekvera inte börjar med #!.

Du kan prova Unix kommandot 'file SKRIPTFIL' så talar den om ifall filen SKRIPTFIL är ett exekverbart skript eller inte.

Om det är en binär kompilerad och ihoplänkad fil från ett C/C++/... program så är felet att den inte är av typen ELF SPARC. ELF SPARC formatet får man endast (såvida man inte har en korskompilator) om man kompilerar och länkar programmet på Sun's SPARC Unix maskiner såsom Algonet har. Windows binärer går ej att exekvera i Algonets CGI miljö. Unix kommandot 'file BINÄRFIL' visar vilket format som filen BINÄRFIL har.

- Skrivet av Stefan Wikström


4.9 Hur anropar jag mitt CGI skript med argument?
Start av argument indikeras med ett frågetecken efter skriptnamnet, samt att argumenten separeras med ett + tecken. Notera att + tecken i argumenten måste bytas ut mot teckensekvensen %2B. T.ex:

http://cgi.algonet.se/htbin/cgiwrap/USERNAMN/
script.pl?arg1+arg2+arg3

Argumenten hamnar sedan i ditt program som separata parametrar till ditt main program. I C/C++ så hamnar dom i argv[] variabeln, i Perl så är det $ARGV.

- Skrivet av Stefan Wikström


4.10 Vad är CGI och vad används det till?
CGI står för Common Gateway Interface och är ett sätt att köra program som utför saker från din hemsida. T.ex. kan man ha ett formulär för en gästbok som sedan anropar ett CGI skript som stoppar in det man matat in i HTML filen för gästboken.

För att köra ett skript så skapar man först skriptet och lägger det i ~/public_html/cgi-bin katalogen samt sätter rättigheterna till 700. Ett enkelt exempel är ett skript som skapar en dynamisk HTML sida som skriver ut Hello world. Skriptet som vi kallar hello.sh (ett shellskript i exemplet nedan) ser ut så här:

#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "Hello world"

Alla CGI skript måste skicka tillbaka en Content-type på första raden följt av en tomrad för att webbläsaren skall veta vad den får tillbaka. Exempel på olika innehållstyper är text/html (HTML dokument), text/plain (vanlig text), image/gif (GIF bild).

För att anropa skriptet lägger man in en länk till det i sin HTML kod:

<a href="http://cgi.algonet.se/htbin/cgiwrap/USER/hello.sh>CGI test</a>

där man får ersätta USER med sitt login. Ni kan själva se resultatet här. Här finns källkoden.

Det som händer är att CGIwrappern startas och sedan kör ditt skript, i det här fallet hello.sh. För exempel på hur detta kan se ut i C/C++, Perl och Java, se de olika avsnitten om de språken.


4.11 Hur använder jag index.asis?
Index.asis kan användas till att styra felkoder och liknande saker som servern skall skicka tillbaka. Den kan t.ex. användas för att styra om webbläsaren till en annan sida. Här följer ett litet exempel som visar hur man gör redirect med index.asis. Låt oss säga att vi vill visa filen Nyheter.html när någon försöker komma åt index.html och att den finns på kontot kalle.

Status: 302 Document Moved
Location: http://www.algonet.se/~kalle/Nyheter.html

Detta flyttar webbläsaren från index.html till Nyheter.html i kalle:s hemkatalog. Index.asis fungerar enbart på index.html/index.htm filen. Det den gör är att webbservern läser den filen före index.html och utför det kommando som finns i filen i stället för att visa index.html/index.htm filen.

P-O har även skrivit en liten räknare som använder sig av index.asis. Det arkivet kan ni tanka hem här. Ni får ändra i filerna så att de passar för erat konto. En bättre förklaring kommer när jag har tid (Mathias alltså).

- Skrivet av P-O Yliniemi


4.12 Hur använder jag .htaccess för att skydda mina sidor?
För att använda .htaccess för att skydda en WWW katalog så måste man använda telnet och lite Unixkommandon. Därför rekommenderar jag att ni läser lite om hur man editerar filer och sätter filrättigheter samt telnettar till sitt Algonet konto innan ni fortsätter.

Först en viktig kommentar, som Jonas Flygare upptäckte: Det är viktigt att katalogen där ni lägger in er .htaccess fil har minst rättighet 755 satt, annars fungerar inte .htaccess. Tack till Jonas Flygare som upptäckte det.

Börja med att ställa er i den katalog som ni vill skydda och skapa en fil som heter .htaccess. Låt oss säga att det är katalogen Skyddad som ligger i public_html katalogen som skall skyddas. Användaren ligger på userX och har loginnamnet LOGIN (ersätt dessa med de värden som stämmer för erat konto). I den skriver ni:

AuthUserFile /home/userX/LOGIN/public_html/Skyddad/.htpasswd
AuthGroupFile /dev/null
AuthName "Min skyddade sida"
AuthType Basic
<Limit GET>
require user LOGIN
</Limit>

Observera att strängen efter AuthName måste inneslutas med citationstecken, annars fungerar det inte. När detta är gjort måste man skapa en .htpasswd fil som innehåller lösenordet för den användaren (LOGIN). Skriv således:

htpasswd -c .htpasswd LOGIN

när ni står i den katalog som ni vill skydda. Knappa därefter in det lösenord som skall användas för den användaren. Flaggan -c som skickas med till htpasswd programmet talar om att den skall skapa en ny .htpasswd fil, som om ni vill lägga till fler användare efter hand så skall ni inte använda den flaggan när ni lägger till de nya användarna (den skall bara användas när det inte finns någon .htpasswd fil).

När detta är gjort så måste ni sätta rättigheterna på filerna. Skriv:

chmod 644 .htaccess .htpasswd

för att göra filerna läsbara för alla. Om man inte sätter rättigheterna till 644 så kommer inte WWW servern att kunna läsa filerna, och ej heller skydda dem med lösenord.

Detta skyddar katalogen så att enbart användaren med användarnamnet LOGIN kommer åt sidan. Om ni vill lägga in flera användare så lägger ni bara till flera rader i .htaccess filen mellan <limit> och </limit> taggarna samt lägger upp lösenord för dem. Om vi t.ex. vill lägga in användarna kalle och arne så lägger vi till följande rader i .htaccess:

require user kalle
require user arne

och skriver därefter:

htpasswd .htpasswd kalle
htpasswd .htpasswd arne

(förutsatt att man står i den katalog man skall skydda).

Mer informatiom om detta finns på Algonets supportsidor. Där skriver de i och för sig att man skall använda chmod 755, men det räcker med chmod 644 för att det skall fungera (filerna behöver inte vara körbara).

Niklas Andersson tipsade om en webbsite där man kan generera htpasswd rader:

http://www.e2.u-net.com/htaccess/make.htm

Ni kan även ladda ner ett program för Windows för att skapa htpasswd rader:

http://www.e2.u-net.com/htaccess.htm


4.13 Stödjer Algonet Frontpage Server Extensions?
Nej. Användarnas webbsidor körs på Apacheservar under Unix, och FP extensions för Unix är inte riktigt så stabilt som man kunde önska sig. Det som FP extensions erbjuder går att göra med CGI skript.


4.14 Stödjer Algonet ASP?
Nej. ASP, Active Server Pages, är något som från början bara fanns i Microsofts WWW server IIS (Internet Information Server) och även PWS (Personal Web Server), och är ett sätt att bygga dynamiska sidor. Man blandar HTML kod och VBScript/JScript i sidan, sedan körs den på servern och resultatet skickas tillbaka till klienten. Anledningen till att Algonet inte stödjer ASP är flera. Algonets WWW server körs på en Unixmaskin och programvaran heter Apache, och den har inget inbyggt stöd för ASP. Det finns dock en plugin, ChiliASP, som är i stort sett kompatibel med Microsoft ASP, som man kan köra under Apache. Detta drar dock en del CPU. Algonet har alltså valt att inte ha någon ASP server tillgänglig för sina kunder. För de som behöver en ASP server så finns det andra WWW hotell som erbjuder det.


4.15 Var skall jag placera mina HTML och CGI filer?
HTML filerna skall placeras i katalogen public_html, som ligger i roten på kontot. Om katalogen inte finns får man skapa den. Rättigheterna på public_html skall vara 755 eller 711. Du kan antingen skapa katalogen och sätta rättigheterna på den med din FTP klient, om den har stöd för det, eller också telnettar du till någon av Algonets Unixmaskiner och använder Unixkommandon för att göra samma sak.

CGI skript skall ligga i katalogen cgi-bin direkt under public_html och ha rättigheterna 755 eller 700. Alla CGI skript måste placeras i cgi-bin katalogen, eller någon av dess underkataloger.


4.16 Vilka CGI skript finns förinstallerade på Algonet?
De som för tillfället finns förinstallerade på Algonet är Matt Wrights FormMail v1.6 och wrapcount (räknare för att hålla koll på hur många träffar varje sida fått). Sökvägarna till dessa är:

Program URL
FormMail v1.6 http://cgi.algonet.se/htbin/formmail_1.6.pl
Wrapcount http://cgi.algonet.se/htbin/wrapcount


4.17 Hur kan jag ställa in vilken sida som skall visas när en sida inte finns?
Det går att ändra alla felmeddelandesidor till sina egna, bara man vet vilken felkod de har. När en sida inte existerar får man felkoden 404. För att ersätta den vanliga felsidan med en egen skapar du först en .htaccess fil i din public_html katalog. I den skriver du:

ErrorDocument 404 http://url.till.ny.sida

där du ersätter url.till.ny.sida med den URL där din felsida finns. Ändra därefter rättigheterna på filen till 644.

Nu är det färdigt, och du kommer att få upp din egna sida om en sida inte finns. Den här .htaccess filen kommer att fungera även för alla underkataloger på ditt konto. Om du vill visa en annan sida i en viss underkatalog skapar du bara en ny .htaccess fil och placerar den i den katalogen.


4.18 Hur gör jag för att styra om från en sida till en annan med .htaccess?
För att styra om från en sida till en annan skapar du en .htaccess fil, förslagsvis i webbroten på ditt konto (dvs i public_html katalogen). I den lägger du in:

Redirect /gammal/sida.html url.till.ny.sida

där du ersätter url.till.ny.sida med den URL där din felsida finns. Sökvägen som du vill styra om från är det som står i URL:en efter domännamnet. Om jag, med login matax, skulle göra en sådan fil, skulle det stå:

Redirect /~matax/gammal/sida.html http://www.algonet.se/~matax/nysida.html

om jag ville styra om http://www.algonet.se/~matax/gammal/sida.html till http://www.algonet.se/~matax/nysida.html. Om man har en egen domän skulle det kunna se ut så här:

Redirect /gammal/sida.html http://www.min.doman.nu/nysida.html

för att styra om http://www.min.doman.nu/gammal/sida.html till http://www.min.doman.nu/nysida.html.

Glöm inte att sätta rättigheterna på .htaccess filen till 644.

Tack till Niklas Andersson för tipset om detta.


4.19 Stödjer Algonet PHP?
Ja, det gör de. En version av PHP 4.x finns installerad och fungerar nu för tiden som den skall på alla maskiner i webbklustret.


4.20 Stödjer Algonet mySQL?
Nej, och det kommer inte att komma i framtiden heller.


4.21 Varför kommer jag inte åt vissa domäner på Algonet?
Det beror troligen på att Algonet använder virtual hosting, där man måste använda HTTP/1.1 för att komma åt en webbsida. Anledningen till att man gör detta är att man då bara behöver använda ett IP nummer för alla domäner. Skulle man använda ett IP nummer per domän skulle IP numren snart ta slut, eftersom Algonet enbart har ett begränsat antal IP nummer till sitt förfogande.


4.22 Hur gör jag för att få mina WAP sidor att fungera på Algonet?
För att WAP (dvs WML filer) skall fungera, så måste man ställa in några MIME typer åt webbservern. Skapa en .htaccess fil i webbroten på ditt konto (~/public_html/ katalogen). I den lägger du in:

AddType image/vnd.wap.wbmp wbmp
AddType text/vnd.wap.wml wml
AddType application/vnd.wap.wmlc wmlc
AddType text/vnd.wap.wmlscript wmlscript
AddType application/vnd.wap.wmlscriptc wmlscriptc

Detta aktiverar de MIME typer som behövs för att WAP skall fungera. När du sparat filen måste du sätta rättigheterna på den. Kör således chmod 755 på filen. Då WAP och WML ändras hela tiden finns det dock ingen garanti för att dessa MIME typer är rätt i framtiden. Om det inte fungerar får ni höra av er till mig, så får jag leta reda på mer information.


4.23 Stödjer Algonet Java servlets eller JSP?
Nej, det gör de inte.


4.24 Vad blir URL:en till min hemsida?
URL:en till din hemsida blir http://www.algonet.se/~USERNAME/, där USERNAME är ditt användarnamn. Om användarnamnet är matax, som i mitt fall, så blir min hemsidesadress http://www.algonet.se/~matax/.


4.25 Varför fungerar inte .htaccess och SSI när man har egen domän?
Det beror på att man måste ändra en del saker i webbserverns konfiguration för varje domän för att det skall fungera. För att få detta åtgärdat så mailar du webmaster på Algonet och ber dem slå på det.

De saker som påverkas är .htaccess (behörighetskontroll, egna felmeddelanden etc), samt SSI (Server Side Includes). Detta berör enbart de som har sitt domänkonto på Algonet (dvs inte Internethotellet).