Original in fr Charles vidal
fr to en Frédéric Raynal
fr to en Alexandre Abbes
en to nl Egon Willighagen
Staat achter de filosofiën van GNU en OpenSource, omdat dit het verspreiden van kennis bevordert. Hoewel hij er weinig tijd voor heeft, speelt hij graag saxofoon.
Dit artikel gaat over de meest gebruikte webserver genaamd Apache. Het is verdeeld in twee delen. In het eerste deel beschrijf ik in het kort de geschiedenis van het World Wide Web en in het tweede deel geef ik een introductie over het HTTP-protocol.
Apache is de naam van een server
die het HTTP protocol spreekt, en dus een zogenaamde webserver is. De
naam Apache heeft een onduidelijke achtergrond: sommige mensen zeggen dat
het een verbastering is van een "a patchy"
(=gebrekkige) server, omdat in het begin van de ontwikkeling veel
patches (=verbeteringen) nodig waren om de server
bruikbaar te maken.
Andere mensen beweren dat het programma vernoemd is naar de Amerikaanse
Apache-indianen, die zeer goed met onverwachte omstandigheden konden
omgaan.
Apache is veruit de meest gebruikte webserver voor het internet. Het berust op versie 1.1 van het HTTP-protocol dat is vastgesteld door het World Wide Web Consortium (W3C). Een onderzoek van Netcraft uit juni 1999 wees uit dat meer dan 60 procent van alle webservers de Apache software gebruikt.
Een webserver is de "server" kant in een client-server-model, dat letterlijk vertaald klant-dienstverlener betekent. Een webserver beantwoord vragen van de "webclient" zoals Netscape of Lynx. De vragen die de webclient -of webbrowser- stelt zijn van de vorm: "Heb jij die ene webpagina?". Het antwoord dat de webserver daarna geeft is van de vorm: "Het artikel luidt: ..." of "Ik kan de webpagina niet vinden.".
dit is een regel tekst die verdeeld is in drie stukken:
Het antwoord :
Het antwoord van de server is opgebouwd uit een header (=kopregels) en een inhoud.
Een voorbeeld. We kunnen het gedrag van een webclient nabootsen met een telnet programma. De webserver is te bereiken via een serveradres en een poortnummer. In het volgende voorbeeld is het adres van de webserver www.linuxfocus.org en het poortnummer is 80, het standaard poortnummer voor webservers.
>telnet www.linuxfocus.org 80 Trying 195.53.25.18... Connected to nova.linuxfocus.org. Escape character is '^]'. GET / HTTP/1.0 <return> <return> HTTP/1.1 200 OK Date: Mon, 27 Sep 1999 21:23:20 GMT Server: Apache/1.3.3 (Unix) (Red Hat/Linux) Last-Modified: Sun, 26 Sep 1999 16:40:44 GMT ETag: "4b005-1616-37ee4c8c" Accept-Ranges: bytes Content-Length: 5654 Connection: close Content-Type: text/html <PAGE HTML> |
Wat staat hier nou eigenlijk?
De eerste regel van het antwoord geeft de gebruikte protocolversie
(HTTP/1.1), een antwoordnummer (200) en tenslotte de tekst "OK". Het
antwoordnummer geeft informatie over de aard van het antwoord. Een
nummer groter dan 400, geeft aan dat er een fout is opgetreden. De
meest voorkomende fout, is de 404-fout, dat aangeeft dat de
opgevraagde webpagine niet aanwezig is.
Daarna volgen een aantal regels die (met de eerste regel) de header
vormen. Deze regels geven telkens informatie in de vorm "Naam: info".
Zo geven de volgende regels een datum, de versie van de server en de
datum van de laatste verandering van de webpagina (hierdoor kan de
client nagaan of zijn cache nog geldig is). De regel die begint met
Content-Length geeft de lengte van de inhoud van het antwoord waarin
de echt informatie staat en Content-Type vertelt de client van welk
MIME-type de teruggegeven informatie is (tekst, HTML, plaatjes ...).
Dit is geen volledige beschrijving; sommige regels zijn voor mij ook
een raadsel ;-)
Laten we eens kijken of we een fout kunnen veroorzaken:
>telnet www.linuxfocus.org 80 Trying 195.53.25.18... Connected to nova.linuxfocus.org. Escape character is '^]'. GET / HTTP/1.0 <return> <return> HTTP/1.1 501 Method Not Implemented Date: Mon, 27 Sep 1999 21:22:03 GMT Server: Apache/1.3.3 (Unix) (Red Hat/Linux) Allow: GET, HEAD, OPTIONS, TRACE Connection: close Content-Type: text/html |
Zoals je ziet, geeft de header heel veel informatie ;-)
Het HTTP-protocol is erg eenvoudig zoals we ook in de volgende
voorbeelden zullen zien:
>telnet www.linuxfocus.org 80 Trying 195.53.25.18... Connected to nova.linuxfocus.org. Escape character is '^]'. GET / <return> |
[de inhoud van de webpagina index.html van de website www.linuxfocus.org wordt dan getoond ] ..
Wat doet de Apache server nou eigenlijk?
In het bovenstaande voorbeeld heb je met telnet via poort 80 contact
gemaakt met de webserver van www.linuxfocus.org (IP adres 195.53.25.1).
De server wachtte vervolgens op een vraag en die gaf je door GET / te
typen gevolgd door twee keer een carriage return.
Waarom is één carriage return niet genoeg?
De lege regel na de GET-opdracht geeft de server het teken dat dit
het eind van de vraag is. De server begint na dit signaal met het
beantwoorden van de vraag en het sturen van het antwoord. Als het
gesprek voorbij is wordt de TCP/IP-verbinding door de server verbroken.
De voorbeelden zijn tot nu toe erg simpel van vorm, maar zeer belangrijk voor het WWW. Het wordt iets ingewikkelder als we gebruik gaan maken van HTTP versie 1.1. Een gesprek dat er met HTTP/1.0 zo uit ziet:
GET / HTTP/1.0 <return> <return> HTTP/1.1 200 OK Date: Tue, 24 Aug 1999 22:25:11 GMT Server: Apache/1.3.3 (Unix) (Red Hat/Linux) Last-Modified: Sun, 01 Aug 1999 11:50:52 GMT ETag: "4b005-1462-37a4349c" Accept-Ranges: bytes Content-Length: 5218 Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ....ziet er met HTTP/1.1 zo uit:
GET / HTTP/1.1 <return> <return> HTTP/1.1 400 Bad Request Date: Tue, 24 Aug 1999 22:24:59 GMT Server: Apache/1.3.3 (Unix) (Red Hat/Linux) Connection: close Transfer-Encoding: chunked Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>400 Bad Request</TITLE> </HEADBODY> <H1>Bad Request</H1> Your browser sent a request that this server could not understand.<P> client sent HTTP/1.1 request without hostname (see RFC2068 section 9, and 14.23): </P> </BODY></HTML>
Dezelfde vraag in versie 1.1 van het HTTP-protocol vereist dat er meer informatie met de vraag wordt meegezonden. De extra informatie die meegestuurd wordt, maakt de vraag specifieker en daarmee de inhoud van het gesprek nauwkeuriger en beter.
Een voorbeeld:
GET / HTTP/1.1 <return> Host:www.linuxfocus.org<return> <return> [...]
Zoals bij de meeste client-server systemen zal de server het volgende doen als hij een vraag ontvangt:
De webserver is hiermee een interface tussen de webclient die het document opvraagt dat bij een URL hoor, en het besturingssysteem waarop Apache draait. Andere namen die voor URL gebruikt worden zijn URI en URN die een iets andere betekenis hebben, maar op precies hetzelfde neerkomen: een unieke naam voor een webpagina.
Sommige clientvragen kunnen niet direct door de server beantwoord worden. In dat geval kan de server een ander programma starten die de vraag probeert op te lossen. Dit is precies hoe CGI-scripts (Common Gateway Interface) werken.