HTTPAan de slag met HTTP


Opmerkingen

Hypertext Transfer Protocol (HTTP) maakt gebruik van een client-verzoek / server-antwoordmodel. HTTP is een stateless protocol, wat betekent dat de server geen informatie of status over elke gebruiker hoeft te bewaren voor de duur van meerdere aanvragen. Om prestatieredenen en om TCP-latentieproblemen te voorkomen, kunnen technieken zoals Persistent, Parallel of Pipelined-verbindingen worden gebruikt.

versies

Versie Note (s) Geschatte releasedatum
HTTP / 0.9 "Zoals geïmplementeerd" 1991-01-01
HTTP / 1.0 Eerste versie van HTTP / 1.0, laatste versie die nog geen RFC is geworden 1992-01-01
HTTP / 1.0 r1 Eerste officiële RFC voor HTTP 1996/05/01
HTTP / 1.1 Verbeteringen in verbindingsverwerking, ondersteuning voor op naam gebaseerde virtuele hosts 1997-01-01
HTTP / 1.1 r1 Ondubbelzinnig gebruik van zoekwoorden opgeschoond, mogelijke problemen met het opstellen van berichten opgelost 1999-06-01
HTTP / 1.1 r2 Grote revisie 2014-06-01
HTTP / 2 Eerste specificatie voor HTTP / 2 2015/05/01

HTTP-verzoeken en antwoorden

HTTP-clients en -servers verzenden respectievelijk HTTP-aanvragen en -antwoorden

HTTP beschrijft hoe een HTTP-client, zoals een webbrowser, een HTTP-aanvraag via een netwerk naar een HTTP-server verzendt, die vervolgens een HTTP-reactie terugstuurt naar de client.

Het HTTP-verzoek is meestal een verzoek om een online bron, zoals een webpagina of afbeelding, maar kan ook aanvullende informatie bevatten, zoals gegevens die op een formulier zijn ingevoerd. De HTTP-reactie is meestal een weergave van een online bron, zoals een webpagina of afbeelding.

HTTP / 0.9

De eerste versie van HTTP die is ontstaan is 0.9, vaak aangeduid als " HTTP As Implemented ". Een veel voorkomende beschrijving van 0,9 is "een subsect van het volledige HTTP [ie 1.0] -protocol". Dit illustreert echter in hoge mate het verschil in mogelijkheden tussen 0,9 en 1,0.

Geen verzoeken of antwoorden in 0.9-headers. Verzoeken bestaan uit een enkele door CRLF beëindigde regel van GET , gevolgd door een spatie, gevolgd door de gevraagde bron-URL. Verwacht wordt dat de antwoorden één HTML-document zijn. Het einde van dit document wordt gemarkeerd door de serverzijde te laten vallen. Er zijn geen voorzieningen om aan te geven of een operatie is geslaagd of mislukt. De enige interactieve eigenschap is de zoekreeks die nauw verbonden is met de HTML-tag <isindex> .

Gebruik van HTTP / 0.9 is tegenwoordig uitzonderlijk zeldzaam. Het wordt af en toe op embedded systemen gezien als een alternatief voor tftp .

HTTP / 1.0

HTTP / 1.0 werd beschreven in RFC 1945 .

HTTP / 1.0 heeft geen enkele functies die tegenwoordig de facto vereist zijn op het web, zoals de Host voor virtuele hosts.

HTTP-clients en -servers verklaren echter soms nog steeds dat ze HTTP / 1.0 gebruiken als ze onvolledige implementatie van het HTTP / 1.1-protocol hebben (bijv. Zonder chunked transfercodering of pipelining), of compatibiliteit wordt belangrijker geacht dan prestaties (bijv. Bij verbinding met lokale proxy servers).

GET / HTTP/1.0
User-Agent: example/1

HTTP/1.0 200 OK
Content-Type: text/plain

Hello
 

HTTP / 1.1

HTTP / 1.1 is oorspronkelijk in 1999 gespecificeerd in RFC 2616 (protocol) en RFC 2617 (authenticatie), maar deze documenten zijn nu verouderd en mogen niet als referentie worden gebruikt:

Gebruik geen RFC2616. Verwijder het van uw harde schijven, bladwijzers en brand (of verantwoord recycleer) alle kopieën die worden afgedrukt.

- Mark Nottingham, voorzitter van de HTTP WG

De up-to-date specificatie van HTTP / 1.1, die overeenkomt met hoe HTTP vandaag wordt geïmplementeerd, staat in nieuwe RFC's 723x:

HTTP / 1.1 toegevoegd, onder andere:

  • gecodeerde overdrachtscodering, waarmee servers betrouwbaar antwoorden van onbekende grootte kunnen verzenden,
  • persistente TCP / IP-verbindingen (die niet-standaard extensies waren in HTTP / 1.0),
  • bereikverzoeken gebruikt voor het hervatten van downloads,
  • cachecontrole.

HTTP / 1.1 probeerde pipelining te introduceren, waardoor HTTP-clients de latentie van verzoek-respons konden verminderen door meerdere aanvragen tegelijk te verzenden zonder te wachten op antwoorden. Helaas is deze functie nooit correct geïmplementeerd in sommige proxy's, waardoor pipelined-verbindingen uitvallen of reacties opnieuw ordenen.

GET / HTTP/1.0
User-Agent: example/1
Host: example.com

HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 6
Connection: close

Hello
 

HTTP / 2

HTTP / 2 ( RFC 7540 ) veranderde het HTTP-formaat van een eenvoudige op tekst gebaseerde aanvraag- en antwoordkoptekst in een binair gegevensformaat verzonden in frames. HTTP / 2 ondersteunt compressie van de headers ( HPACK ).

Dit verminderde de overhead van aanvragen en maakte het mogelijk meerdere antwoorden tegelijkertijd te ontvangen via een enkele TCP / IP-verbinding.

Ondanks grote veranderingen in de gegevensindeling, gebruikt HTTP / 2 nog steeds HTTP-headers, en verzoeken en antwoorden kunnen nauwkeurig worden vertaald tussen HTTP / 1.1 en 2.