Je hebt misschien gehoord van GET- en POST-verzoeken, maar dit is nog maar het begin.

Elk HTTP-verzoek gebruikt een methode om het essentiële doel ervan te beschrijven. Elke methode heeft specifieke toepassingen voor taken variërend van het ophalen van een webpagina tot het verwijderen van een bron. GET en POST zijn de twee bekendste, maar er zijn er nog zeven.

Lees meer over dit concept en waar elk van de negen mogelijke HTTP-methoden voor is.

Wat is een HTTP-methode?

Elk HTTP-verzoek dat u doet, bevat een actie en een doel voor die actie, net zoals een werkwoord en een zelfstandig naamwoord dat als een object fungeert.

De URL identificeert een unieke bron die fungeert als het doel van het verzoek. Ondertussen wordt het werkwoord - welke actie op die URL moet worden uitgevoerd - weergegeven door een methode.

De eerste regel van een HTTP-verzoek bevat de belangrijkste informatie, waaronder de HTTP-versie, de bron-URL en de aanvraagmethode:

GET /software/htp/cics/index.html HTTP/1.1

Wat zijn de 9 HTTP-methoden?

instagram viewer

De eerste vier methoden zijn equivalenten van de vier acties uit het CRUD-model: Maken, Lezen, Bijwerken en Verwijderen. De respectieve HTTP-methoden zijn NA, KRIJGEN, NEERZETTEN, En VERWIJDEREN.

KRIJGEN

Het meest voorkomende standaardverzoek dat u verzendt wanneer u op internet surft en op links klikt of gegevens opvraagt ​​via een API. De server moet de bron retourneren in de antwoordtekst.

NA

Gebruik POST om nieuwe bronnen te maken, met name wanneer die bronnen een identificeerbare bovenliggende bron hebben. Als u bijvoorbeeld een /clients-resource hebt, moet u een nieuwe client maken door de vereiste gegevens te POSTen naar /clients.

NEERZETTEN

Update of vervang een bestaande bron. Dit is vergelijkbaar met POST, maar de klant is verantwoordelijk voor het kiezen van een unieke identificatie voor de bron. Om een ​​bron te maken met behulp van PUT, moet de bron-URL een ID bevatten, bijvoorbeeld /clients/007.

VERWIJDEREN

Gebruik deze methode om de bron te verwijderen die u opgeeft in de URL. Zoals bij alle HTTP-methoden, is de ondersteuning afhankelijk van de server. Het kan iedereen een bron laten verwijderen, hoewel dat duidelijk riskant zou zijn. Een server die DELETE ondersteunt, heeft meestal het volgende nodig authenticatie en authorisatie.

Twee andere methoden bieden kleine variaties op het bovenstaande: LAPJE En HOOFD. U vindt ze misschien handig bij het gebruik van bepaalde API's of als u uw eigen API's bouwt.

LAPJE

De PATCH-methode werkt een bestaande bron bij, met slechts gedeeltelijke gegevens. Met andere woorden, u hoeft niet de volledige weergave van de nieuwe bron op te geven, alleen de velden die u moet bijwerken.

HOOFD

Een HEAD-verzoek is voor wanneer u informatie over een bron wilt, maar niet de bron zelf. Het antwoord bevat geen hoofdtekst, maar wel een set nuttige HTTP-headers. U kunt de totale grootte van een bestand achterhalen voordat u het downloadt via de Content-Length-antwoordheader.

De overige methoden—OPTIES, AANSLUITEN, En SPOOR- zijn onduidelijker. Ze houden zich bezig met metadata, netwerken en probleemoplossing. U vindt ze misschien nuttig bij bepaalde soorten programmeren, maar u zult ze waarschijnlijk niet elke dag gebruiken.

OPTIES

Een server zou op deze methode moeten reageren door u te vertellen welke HTTP-methoden de bron daadwerkelijk ondersteunt. Dit kan handig zijn voor ontdekking.

AANSLUITEN

Bepaalde typen netwerksoftware kunnen deze methode gebruiken om een ​​tunnel tussen twee computers tot stand te brengen. Dit wordt vaak gebruikt om een ​​HTTPS-verbinding tot stand te brengen via een proxy.

SPOOR

Deze methode is handig voor het oplossen van problemen. Bij ontvangst moet de server het verzoek dat het in de antwoordtekst heeft ontvangen, terugsturen. De methode biedt een mechanisme om te controleren of tussenliggende machines details van het verzoek hebben gewijzigd.

GET en HEAD zijn de enige twee methoden die elke algemene webserver ondersteunt. Een bepaalde server ondersteunt mogelijk andere methoden, dus u moet dit eerst controleren.

Wanneer zou u deze methoden kunnen gebruiken?

Meestal zullen HTTP-methoden transparant voor u zijn. U moet er echter rekening mee houden als u een formulier aan een webpagina toevoegt of een API gebruikt.

HTTP-methoden in HTML

De formulier elementen methode Met attribuut kunt u de HTTP-methode instellen die moet worden gebruikt wanneer het formulier wordt verzonden. HTML ondersteunt alleen de na En krijgen waarden voor dit attribuut—plus een obscuur dialoogalternatief.

<formuliermethode="na">
...
formulier>

U kunt functies gebruiken zoals De hulpprogramma's voor ontwikkelaars van Chrome bekijken Netwerk verkeer en bevestig de methode die uw browser verzendt voor een bepaald verzoek. Houd er rekening mee dat de meeste webformulieren een POST verzenden, omdat ze doorgaans gegevens op de server bijwerken. Veel zoekformulieren gebruiken GET echter omdat ze eenvoudigweg gegevens ophalen zonder deze te wijzigen.

Omdat POST-gegevens geen deel uitmaken van de URL, is deze meer privé dan wanneer u deze via een GET verzendt. De gegevens bevinden zich nog steeds in de hoofdtekst van het verzoek, waar een aanvaller deze in theorie kan onderscheppen. Maar het verzenden van gegevens via HTTPS zou dit probleem moeten verminderen.

U mag nooit een gebruikersaanmelding implementeren met GET-verzoeken. Ook al lijkt inloggen meer op een leesbewerking dan op een maken of bijwerken, toch moet u POST gebruiken om de gegevens te beveiligen.

Aangezien HTML-formulieren alleen GET en POST ondersteunen, kunt u niet direct een formulier maken dat bijvoorbeeld een bron op de server verwijdert. Een veelgebruikte oplossing, die de REST-principes op de server respecteert, is om een ​​tijdelijke variabele te gebruiken en te doen alsof dit de oorspronkelijke HTTP-methode was. Bijvoorbeeld:

<formuliermethode="na">
<invoertype="verborgen"naam="_methode"waarde="VERWIJDEREN" />
...
formulier>

Uw server-side code kan controleren op de aanwezigheid van deze 'proxy-methode'-variabele en deze behandelen alsof het de echte gebruikte methode is. Bijvoorbeeld in PHP:

$methode = $_SERVER["REQUEST_METHODE"];

als (array_key_exists("_methode", $_REQUEST)) {
$methode = $_REQUEST["_methode"];
}

HTTP-verzoeken programmatisch verzenden

De Web Fetch API biedt een fetch() JavaScript-functie die u kunt gebruiken om een ​​HTTP-verzoek te verzenden. Het ondersteunt het volledige scala aan methoden, niet alleen de GET en POST die HTML ondersteunt.

De fetch-functie stuurt standaard een GET-verzoek. Als u een andere methode wilt gebruiken, geeft u de naam ervan op als waarde voor a methode eigenschap in een object dat u verzendt als het tweede argument.

ophalen(' https://example.com/', { methode: "HOOFD" });

U kunt ook HTTP-verzoeken verzenden vanuit vele talen aan de serverzijde, waaronder PHP. In die taal is de curl-bibliotheek een gebruikelijke manier om dergelijke verzoeken te verzenden.

De curl-bibliotheek heeft een CURLOPT_CUSTOMREQUEST-optie die u kunt instellen om een ​​methode op te geven

als ($ch = curl_init($url)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'NEERZETTEN');
curl_exec($ch);
// ...
}

Via de opdrachtregel

Het curl-opdrachtregelprogramma laat je data overdragen van of naar een server, via een van de verschillende protocollen. HTTP (en HTTPS) zijn twee veel voorkomende use-cases.

Curl stuurt standaard een GET-verzoek, zoals u kunt bevestigen met de volgende opdracht:

curl -v -s -o /dev/null voorbeeld.com/get-test

U kunt de aanvraagmethode zien op de vijfde regel van de uitvoer:

U kunt de aanvraagmethode wijzigen die curl verzendt met behulp van de vlag -X:

curl -v -s -o /dev/null voorbeeld.com/get-test -X POST

Nu stuurt curl een verzoek met behulp van de POST-methode:

HTTP heeft veel toepassingen

Het meeste van wat u op internet doet, betreft standaard GET-verzoeken, met af en toe een POST voor het indienen van formulieren. Maar HTTP is een veel expressiever protocol dan dit suggereert.

Enkele van de meest gebruikelijke methoden weerspiegelen het CRUD-model, waardoor HTTP een uitstekende basis is voor het bouwen van een resourcegerichte API.