HTTP

**HTTP** (hiperteksoordragprotokol) is ’n protokol wat gebruik word tydens die kommunikasie tussen ’n webkliënt (meestal ’n webblaaier) en ’n webbediener.  Die protokol word nie net op die Internet gebruik nie, maar ook op lokale netwerke (ons praat dan van ’n intranet).

Die HTTP-protokol spesifiseer die versoeke (Engels: *requests*) wat 'n kliënt, byvoorbeeld ’n webblaaier, aan die bediener kan stel asook die antwoorde (Engels: *responses*) wat ’n webbediener kan terugstuur.  Elke versoek bevat ’n URL wat verwys na die webkomponent of ’n statiese objek soos ’n webbladsy wat versoek word.

## HTTP-versoeke 
’n HTTP-versoek bestaan uit ’n metode, die URL, opskrifvelde (*header fields*) en uiteindelik die inhoud.  ’n Oorsig van die HTTP-versoek metodes:
* GET – Ontvang die dokument gespesifiseer deur die URL.
* HEAD – Ontvang slegs die opskrifte (*headers*) van die gevraagde dokument.
* POST – Versend data na die bediener.
* PUT – Vervang die dokument op die bediener met die versende data.
* DELETE – Verwyder die dokument.
* OPTIONS – Vra die moontlike opsies wat die webbediener ondersteun aan.

’n Volledige versoek, met opskrifvelde, lyk tipies as volg:

 GET /wiki/Tuisblad HTTP/1.1
 Host: af.wikipedia.org
 Connection: close
 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3
 Accept: text/xml,text/html,text/plain,image/png,image/jpeg,image/gif
 Accept-Charset: ISO-8859-1,utf-8
 Keep-Alive: 300

## HTTP-antwoorde 
’n HTTP-antwoord bestaan uit ’n resultaatkode, opskrifvelde (*header fields*) en ’n boodskap.
Die resultaatkode bestaan uit drie syfers, waarvan die eerste syfer die belangrikste is:

* 1xx: ’n informele boodskap van die webbediener wat gevolg sal word deur meer data
* 2xx: ’n boodskap van die bediener wat aandui dat die gevraagde aksie suksesvol voltooi is
* 3xx: ’n aanstuur (*redirect*) na 'n ander URL
* 4xx: ’n foutboodskap wat deur die kliënt (tipies ’n webblaaier) veroorsaak is, soos ’n verkeerde URL-tipe.
* 5xx: ’n foutboodskap wat deur die webbediener veroorsaak is, soos 'n  fout in ’n CGI skrip
* 6xx: ’n proksiefout het voorgekom

Die resultaat-kodes wat die meeste gebruik word is:
* 200 OK – Die gevraagde dokument is suksesvol aangestuur.
* 304 Not Modified – T.o.v. die weergawe in die kas is die bladsy nie gewysig nie.
* 403 Forbidden – Die gevraagde dokument mag nie bekyk word nie.
* 404 Not Found – Die gevraagde dokument bestaan nie.
* 405 Not Allowed – Die gebruiker is nie geregtig om die dokument te sien nie.
* 500 Internal Server Error – Die webbediener kon nie die gevraagde aksie uitvoer nie.

’n Antwoord op die bostaande navraag kan moontlik as volg uitsien:

 HTTP/1.0 200 OK
 Date: Thu, 08 Apr 2004 18:24:33 GMT
 Server: Apache/1.3.29 (Unix) PHP/4.3.4
 X-Powered-By: PHP/4.3.4
 Content-Language: af
 Content-Type: text/html; charset=iso-8859-1
 X-Cache: MISS from wikipedia.org
 Connection: close
 Content Type: TEXT/HTML
 Content Length: 3'127 bytes (received)
 --- Die HTML-kode ---

## Geskiedenis 
Die oorspronklike HTTP weergawe, weergawe HTTP 1.0 vaar aanvanklik baie goed, maar met die ontploffing in populariteit van die Internet kom ’n aantal tekortkominge aan die lig.  Hierdie tekortkominge word in die volgende weergawe, weergawe HTTP 1.1 aangespreek.  Vanaf ongeveer 1997 is die standaard op die Wêreldwye Web dan ook besig om te verskuif vanaf HTTP 1.0 na HTTP 1.1.

Een van die belangrikste beperkinge van HTTP 1.0 was dat elke IP-adres slegs 1 domein kon huisves. Vanweë die enorme groei in die aantal WWW-domeine, sou dit baie gou tot ’n tekort aan IP-adresse gelei het.  HTTP 1.1 ondersteun die huisvesting van meer as 1 domein op dieselfde IP-adres. Andere belangrike toevoegings in HTTP 1.1 wat poog om spoed en werkverrigting te verhoog:
* ondersteuning van ’n kas (*cache*)
* die verbinding word nie noodwendig na elke antwoord, soos in HTTP 1.0, verbreek nie (sogenaamde *persistent connections*)
* die moontlikheid om (dinamies gegenereerde) bladsye gedeeltelik te versend.  Hierdeur kan met die versending van die eerste deel begin word voordat die hele bladsy gegenereer is, selfs voordat dit bekend is hoe lank die bladsy uiteindelik sal wees.

Die tegniese details van die HTTP-protokol is opgeteken in verskillende RFC’s.  HTTP weergawe 1.0 is gedokumenteer in , terwyl weergawe 1.1 van die protokol in  beskryf word.  Hierdie spesifikasies kan vanaf http://www.rfc-editor.org/rfc.html afgelaai word.

## Eksterne skakels 
*  HTTP/1.1 Status Code Definitions

## Verwysings