In deze post ga ik uitleggen hoe HTTP werkt. HTTP is iets wat iedereen wel gebruikt, bijvoorbeeld als je een website bezoekt.

HTTP staat voor Hyper Text Transport Protocol, en word voornamelijk gebruikt voor websites. HTTP is een client-server protocol, er is dus een server (webserver als Apache) en een client (webbrowser als Firefox).

Werking

HTTP is een client-server protocol. De client stuurt dus een aanvraag naar de server, welke door de server beantwoord word. Hieronder is een eenvoudige voorstelling:

Http schema foto

De client

De client stuurt naar de server een aanvraag bestaande uit headers en ziet er zo uit:

GET /2020/htww-2-http.html  HTTP/2
Host: vincentlammens.be
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/css,*/*;q=0.1
Accept-Language: nl-BE,en-US;q=0.7,en-GB;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: keep-alive

Deze headers worden automatisch door de browser verzonden. Hier zijn elke regel een header. De eerste is de methode (GET), gevolgd door het pad (/2020/htww-2-http.html) en de versie van het HTTP-protocol (HTTP/2). Er zijn naast GET verschillende methodes, GET en POST zijn de meest gebruikte. De regel daar onder is de Host, de domeinnaam die je bezoekt. Dit is bedoeld voor de webserversoftware zodat er op 1 IP adres meerdere websites kunnen gehost worden. Daarna volgt de User-agent header, deze is de browser die je gebruikt, en nog enkele andere headers die kunnen gebruikt worden door de webserver.

De server

De webserver beantwoord elke aanvraag van de client. Deze stuurt naast de pagina die opgevraagd werd, ook headers. Het antwoord bestaat uit de headers, 2 lege regels en dan de inhoud van de aangevraagde pagina. De headers die de server terugstuurt zien er ongeveer zo uit:

HTTP/2 200 OK
date: Sat, 06 Jun 2020 09:40:17 GMT
server: Apache/2
last-modified: Tue, 21 Apr 2020 13:26:55 GMT
etag: "5dc7-5a3ccf81f25c0-gzip"
accept-ranges: bytes
vary: Accept-Encoding,User-Agent
content-encoding: gzip
content-length: 5484
content-type: text/css
X-Firefox-Spdy: h2

Deze header begint met een response code, in dit geval 200 welke betekent dat alles ok is. Je hebt hoogstwaarschijnlijk ook al een 404 fout gezien als je een pagina opvraagt die niet gevonden word. Foutcodes beginnend met 2 zijn eigenlijk geen foutcodes, aangezien deze aantonen dat alles OK is. Codes beginnend met een 3 zijn doorstuur codes, zoals 301 (permanent) en 302 (tijdelijk). Codes beginnend met 4 zijn fouten aan de client (bv een fout opgegeven url, 404) en foutcodes beginnend met een 5 zijn fouten op de server.

HTTPS

HTTPS staat voor Hyper Text Transport Protocol Secure. Hierbij is de verbinding tussen de client en de server versleuteld. Hierdoor kunnen hackers niet zien wat je verstuurd, of wat je ontvangt. Ze kunnen echter wel de domeinnaam zien van de site die je bezoekt, maar niet het pad (alles na de domeinnaam). HTTPS is tegenwoordig de standaard, en veel browsers gaan gewone HTTP verbindingen aanduiden als “Onveilig” (of zelfs helemaal blokeren). Het Gebruik van HTTPS is omwille van de extra veiligheid dan ook altijd aan te raden. Vroeger koste HTTPS geld, doordat je een SSL-certificaat moest aanschaffen maar dankzij Lets-Encrypt is het gebruik van HTTPS helemaal gratis geworden. (SSL word in een volgend deel uitgelegd)

zo. Dit was de HTWW #2, Ik ga proberen elke week een ander onderwerp uit te leggen. Als je suggesties hebt voor een onderwerp, laat gerust weten: vincent@vincentlammens.be