Du har kanskje hørt om GET- og POST-forespørsler, men de er bare begynnelsen.

Hver HTTP-forespørsel bruker en metode for å beskrive dens essensielle formål. Hver metode har spesifikke bruksområder for oppgaver som spenner fra å hente en nettside til å slette en ressurs. GET og POST er de to mest kjente, men det er syv andre.

Lær om dette konseptet og hva hver av de ni mulige HTTP-metodene er for.

Hva er en HTTP-metode?

Hver HTTP-forespørsel du gjør inkluderer en handling og et mål for den handlingen, omtrent som et verb og et substantiv som fungerer som et objekt.

URL-en identifiserer en unik ressurs, som fungerer som målet for forespørselen. I mellomtiden er verbet – hvilken handling som skal utføres på den nettadressen – representert av en metode.

Den første linjen i en HTTP-forespørsel gir den viktigste informasjonen, inkludert HTTP-versjonen, ressurs-URLen og forespørselsmetoden:

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

Hva er de 9 HTTP-metodene?

De fire første metodene er ekvivalenter av de fire handlingene fra CRUD-modellen: Opprett, Les, Oppdater og Slett. De respektive HTTP-metodene er

instagram viewer
POST, , SETTE, og SLETT.

Den vanligste standardforespørselen du sender når du surfer på nettet og klikker på lenker eller ber om data via et API. Serveren skal returnere ressursen i sin svartekst.

POST

Bruk POST til å opprette nye ressurser, spesielt når disse ressursene har en identifiserbar overordnet ressurs. For eksempel, hvis du har en /clients-ressurs, bør du opprette en ny klient ved å POSTE nødvendige data til /clients.

SETTE

Oppdater eller erstatt en eksisterende ressurs. Dette ligner på POST, men klienten er ansvarlig for å velge en unik identifikator for ressursen. For å opprette en ressurs ved å bruke PUT, bør ressurs-URLen inneholde en identifikator, for eksempel /clients/007.

SLETT

Bruk denne metoden til å slette ressursen du angir i URL-en. Som alle HTTP-metoder, er støtten ned til serveren. Det kan la hvem som helst slette en ressurs, selv om det helt klart ville være risikabelt. En server som støtter DELETE vil vanligvis kreve autentisering og autorisasjon.

To andre metoder gir små variasjoner i forhold til ovennevnte: LAPP og HODE. Du kan finne dem nyttige når du bruker visse APIer eller hvis du bygger dine egne.

LAPP

PATCH-metoden oppdaterer en eksisterende ressurs, med bare delvise data. Med andre ord, du trenger ikke å oppgi den fullstendige representasjonen av den nye ressursen, bare feltene du må oppdatere.

HODE

En HEAD-forespørsel er for når du ønsker informasjon om en ressurs, men ikke selve ressursen. Svaret vil ikke inneholde en kropp, men det vil inneholde et sett med nyttige HTTP-hoder. Du kan finne ut den totale størrelsen på en fil før du laster den ned, via Content-Length-responsoverskriften.

De resterende metodene—ALTERNATIVER, KOBLE, og SPOR– er mer uklare. De tar for seg metadata, nettverk og feilsøking. Du kan finne dem nyttige i visse typer programmering, men du vil sannsynligvis ikke bruke dem hver dag.

ALTERNATIVER

En server bør svare på denne metoden ved å fortelle deg hvilke HTTP-metoder ressursen faktisk støtter. Dette kan være nyttig for oppdagelse.

KOBLE

Visse typer nettverksprogramvare kan bruke denne metoden for å etablere en tunnel mellom to datamaskiner. Dette brukes ofte til å starte en HTTPS-tilkobling via en proxy.

SPOR

Denne metoden er nyttig for feilsøking. Når den mottas, skal serveren sende tilbake forespørselen den mottok i svarteksten. Metoden gir en mekanisme for å sjekke om mellomliggende maskiner har endret noen detaljer i forespørselen.

GET og HEAD er de eneste to metodene som hver generell webserver støtter. En bestemt server støtter kanskje ikke andre metoder, så du bør sjekke først.

Når kan du bruke disse metodene?

Mye av tiden vil HTTP-metoder være transparente for deg. Du må imidlertid vurdere dem hvis du legger til et skjema på en nettside eller bruker et API.

HTTP-metoder i HTML

De form element metode attributt lar deg angi HTTP-metoden som skal brukes når skjemaet sendes. HTML støtter bare post og verdier for dette attributtet – pluss et obskurt dialogalternativ.

<formmetode="post">
...
form>

Du kan bruke funksjoner som Chromes utviklerverktøy å se Nettverk trafikk og bekrefte metoden nettleseren din sender for en bestemt forespørsel. Merk at de fleste nettskjemaer vil sende en POST siden de vanligvis oppdaterer data på serveren. Mange søkeskjemaer bruker imidlertid GET siden de ganske enkelt henter data uten å endre det.

Fordi POST-data ikke er en del av URL-en, er den mer privat enn hvis du sender den via en GET. Dataene eksisterer fortsatt i selve forespørselen, hvor en angriper i teorien kan avskjære dem. Men å sende data via HTTPS bør dempe dette problemet.

Du bør aldri implementere en brukerpålogging med GET-forespørsler. Selv om pålogging kan virke mer som en leseoperasjon enn en opprettelse eller oppdatering, må du fortsatt bruke POST for å sikre dataene.

Siden HTML-skjemaer kun støtter GET og POST, kan du ikke direkte opprette et skjema som for eksempel sletter en ressurs på serveren. En vanlig løsning, som respekterer REST-prinsippene på serveren, er å bruke en plassholdervariabel og late som om det var den opprinnelige HTTP-metoden. For eksempel:

<formmetode="post">
<inputtype="skjult"Navn="_metode"verdi="SLETT" />
...
form>

Koden din på serversiden kan sjekke tilstedeværelsen av denne "proxy-metoden"-variabelen og behandle den som om det var den virkelige metoden som ble brukt. For eksempel, i PHP:

$metode = $_SERVER["REQUEST_METHOD"];

hvis (array_key_exists("_metode", $_REQUEST)) {
$metode = $_REQUEST["_metode"];
}

Sende HTTP-forespørsler programmatisk

Web Fetch API gir en fetch() JavaScript-funksjon som du kan bruke til å sende en HTTP-forespørsel. Den støtter hele spekteret av metoder, ikke bare GET og POST som HTML støtter.

Hentefunksjonen vil sende en GET-forespørsel som standard. For å bruke en annen metode, spesifiser navnet som verdien for a metode egenskap i et objekt som du sender som det andre argumentet.

hente(' https://example.com/', { metode: "HODE" });

Du kan også sende HTTP-forespørsler fra mange serversidespråk, inkludert PHP. På det språket er curl-biblioteket en vanlig måte å sende slike forespørsler på.

Curl-biblioteket har et CURLOPT_CUSTOMREQUEST-alternativ du kan angi for å spesifisere en metode

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

Via kommandolinjen

Curl-kommandolinjeverktøyet lar deg overføre data til eller fra en server, via en av flere protokoller. HTTP (og HTTPS) er to svært vanlige brukstilfeller.

Som standard sender curl en GET-forespørsel, som du kan bekrefte med følgende kommando:

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

Du kan se forespørselsmetoden på den femte linjen i utdata:

Du kan endre forespørselsmetoden som curl sender ved å bruke -X-flagget:

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

Nå sender curl en forespørsel ved å bruke POST-metoden:

HTTP har mange bruksområder

Det meste av det du gjør på nettet vil involvere standard GET-forespørsler, med sporadiske POST for innsending av skjemaer. Men HTTP er en mye mer uttrykksfull protokoll enn dette antyder.

Noen av de vanligste metodene speiler CRUD-modellen som gjør HTTP til et utmerket grunnlag for å bygge et ressursfokusert API.