Het protocol van HTTP/1.1 wordt gedefinieerd door RFC 2616 (nu grotendeels verouderd door RFC 7230-7235). Het is een op tekst gebaseerd protocol dat gebruikmaakt van een client-servermodel waarbij een client (zoals een webbrowser) een verzoek indient bij een server (zoals een webserver). Hier is een overzicht van de belangrijkste kenmerken:
Belangrijkste kenmerken:
* Client-server: Een client initieert de communicatie door een verzoek naar een server te sturen. De server reageert op het verzoek.
* Verzoek-antwoord: Communicatie is gebaseerd op een verzoek-antwoordcyclus. Elk verzoek van de client genereert één antwoord van de server.
* Staatloos: Elk verzoek staat los van eerdere verzoeken. De server bewaart geen informatie over eerdere interacties met de client. (Sessies worden beheerd via mechanismen zoals cookies, die niet inherent zijn aan het protocol zelf.)
* Verbindingsbeheer: HTTP/1.1 introduceert permanente verbindingen (keep-alive). Hierdoor kunnen meerdere verzoeken en antwoorden via één TCP-verbinding worden verzonden, waardoor de efficiëntie wordt verbeterd. De `Connection` header bepaalt of de verbinding na een reactie in leven moet worden gehouden. Indien niet gespecificeerd, hangt het standaardgedrag af van de configuratie van de server, maar meestal is dit om de verbinding in stand te houden.
* Caching: HTTP/1.1 ondersteunt cachingmechanismen om de prestaties te verbeteren. Reacties kunnen headers bevatten die aangeven of en hoe ze in de cache kunnen worden opgeslagen.
* Kopteksten: Zowel verzoeken als antwoorden bevatten headers die metagegevens bevatten, zoals inhoudstype, lengte, datum en meer. Headers zijn sleutel-waardeparen.
* Methoden: HTTP definieert verschillende methoden (werkwoorden) om het type verzoek te specificeren, waaronder:GET, POST, PUT, DELETE, HEAD, OPTIONS, enz.
* Statuscodes: De server antwoordt met een driecijferige statuscode die de uitkomst van het verzoek aangeeft (bijvoorbeeld 200 OK, 404 Niet gevonden, 500 Interne serverfout).
* Inhoud: Het antwoord omvat doorgaans de gevraagde inhoud (bijvoorbeeld een HTML-pagina, een afbeelding, JSON-gegevens).
Structuur van een verzoek:
```
METHODE /pad HTTP/1.1
Host:voorbeeld.com
User-agent:Mozilla/5.0 ...
Accepteren:tekst/html,applicatie/xhtml+xml,...
Verbinding:keep-alive
...andere kopteksten...
[verzoektekst (optioneel)]
```
Structuur van een reactie:
```
HTTP/1.1 200 OK
Datum:dinsdag 29 november 2023 16:03:22 GMT
Server:Apache/2.4.54
Inhoudstype:tekst/html; tekenset=UTF-8
Inhoud-lengte:1234
Verbinding:keep-alive
...andere kopteksten...
[reactielichaam]
```
Beperkingen van HTTP/1.1:
* Hoofdlijnblokkering: Omdat verzoeken opeenvolgend via één enkele verbinding worden verzonden, kan een langzaam ladende bron volgende verzoeken blokkeren, wat de prestaties beïnvloedt. Dit is een aanzienlijk nadeel, dat wordt verholpen door latere protocollen zoals HTTP/2 en HTTP/3.
* Overhead: Het op tekst gebaseerde karakter en de uitgebreide headers voegen wat overhead toe in vergelijking met nieuwere, binaire protocollen.
HTTP/1.1 verbeterde aanzienlijk ten opzichte van zijn voorganger, HTTP/1.0, maar de beperkingen ervan maakten de weg vrij voor de ontwikkeling van efficiëntere protocollen zoals HTTP/2 en HTTP/3. Het begrijpen van HTTP/1.1 is echter nog steeds waardevol, omdat veel systemen het nog steeds gebruiken, en het begrijpen van de principes ervan is cruciaal om de evolutie van het web te begrijpen. |