Du kanske har hört talas om GET- och POST-förfrågningar, men de är bara början.
Varje HTTP-förfrågan använder en metod för att beskriva dess väsentliga syfte. Varje metod har specifika användningsområden för uppgifter som sträcker sig från att hämta en webbsida till att ta bort en resurs. GET och POST är de två mest bekanta, men det finns sju andra.
Lär dig mer om detta koncept och vad var och en av de nio möjliga HTTP-metoderna är till för.
Vad är en HTTP-metod?
Varje HTTP-begäran du gör innehåller en åtgärd och ett mål för den åtgärden, ungefär som ett verb och ett substantiv som fungerar som ett objekt.
URL: en identifierar en unik resurs som fungerar som mål för begäran. Samtidigt representeras verbet – vilken åtgärd som ska utföras på den webbadressen – av en metod.
Den första raden i en HTTP-begäran ger den viktigaste informationen, inklusive HTTP-versionen, resurs-URL: n och förfrågningsmetoden:
Hämta /software/htp/cics/index.html HTTP/1.1
Vilka är de 9 HTTP-metoderna?
De första fyra metoderna är motsvarigheter till de fyra åtgärderna från CRUD-modellen: Skapa, Läs, Uppdatera och Ta bort. De respektive HTTP-metoderna är
POSTA, SKAFFA SIG, SÄTTA, och RADERA.SKAFFA SIG
Den vanligaste standardförfrågan du skickar när du surfar på webben och klickar på länkar eller begär data via ett API. Servern bör returnera resursen i sin svarstext.
POSTA
Använd POST för att skapa nya resurser, särskilt när dessa resurser har en identifierbar överordnad resurs. Till exempel, om du har en /clients-resurs, bör du skapa en ny klient genom att POSTA nödvändig data till /clients.
SÄTTA
Uppdatera eller ersätt en befintlig resurs. Detta liknar POST, men klienten är ansvarig för att välja en unik identifierare för resursen. För att skapa en resurs med PUT bör resurs-URL: n innehålla en identifierare, till exempel /clients/007.
RADERA
Använd den här metoden för att ta bort resursen du anger i URL: en. Som alla HTTP-metoder är supporten nere på servern. Det kan låta vem som helst ta bort en resurs, även om det helt klart skulle vara riskabelt. En server som stöder DELETE kommer vanligtvis att kräva autentisering och auktorisering.
Två andra metoder ger små variationer på ovanstående: LAPPA och HUVUD. Du kan hitta dem användbara när du använder vissa API: er eller om du bygger dina egna.
LAPPA
PATCH-metoden uppdaterar en befintlig resurs, med endast partiella data. Med andra ord behöver du inte tillhandahålla den fullständiga representationen av den nya resursen, bara de fält som du behöver uppdatera.
HUVUD
En HEAD-förfrågan är till för när du vill ha information om en resurs, men inte själva resursen. Svaret kommer inte att innehålla en text, men det kommer att innehålla en uppsättning användbara HTTP-rubriker. Du kan ta reda på den totala storleken på en fil innan du laddar ner den, via Content-Length-svarshuvudet.
De återstående metoderna—ALTERNATIV, ANSLUTA, och SPÅR– är mer oklara. De sysslar med metadata, nätverk och felsökning. Du kanske tycker att de är användbara i vissa typer av programmering, men du kommer förmodligen inte att använda dem varje dag.
ALTERNATIV
En server bör svara på den här metoden genom att tala om för dig vilka HTTP-metoder resursen faktiskt stöder. Detta kan vara användbart för upptäckt.
ANSLUTA
Vissa typer av nätverksprogram kan använda denna metod för att upprätta en tunnel mellan två datorer. Detta används ofta för att initiera en HTTPS-anslutning via en proxy.
SPÅR
Denna metod är användbar för felsökning. När servern tar emot den ska den skicka tillbaka förfrågan den tog emot i svarskroppen. Metoden tillhandahåller en mekanism för att kontrollera om mellanliggande maskiner har ändrat några detaljer i begäran.
GET och HEAD är de enda två metoderna som varje allmän webbserver stöder. En viss server kan eller kanske inte stöder andra metoder, så du bör kontrollera först.
När kan du använda dessa metoder?
Mycket av tiden kommer HTTP-metoder att vara transparenta för dig. Du måste dock överväga dem om du lägger till ett formulär på en webbsida eller använder ett API.
HTTP-metoder i HTML
De form element metod attribut låter dig ställa in HTTP-metoden som ska användas när formuläret skickas. HTML stöder endast posta och skaffa sig värden för det här attributet – plus ett alternativ för obskyr dialogruta.
<formmetod="posta">
...
form>
Du kan använda funktioner som Chromes utvecklarverktyg att se Nätverk trafik och bekräfta metoden din webbläsare skickar för en viss begäran. Observera att de flesta webbformulär skickar ett POST eftersom de vanligtvis uppdaterar data på servern. Många sökformulär använder dock GET eftersom de helt enkelt hämtar data utan att ändra det.
Eftersom POST-data inte är en del av URL: en är den mer privat än om du skickar den via en GET. Uppgifterna finns fortfarande kvar i förfrågan där, i teorin, en angripare kan fånga upp den. Men att skicka data via HTTPS bör lindra detta problem.
Du bör aldrig implementera en användarinloggning med GET-förfrågningar. Även om inloggning kan verka mer som en läsoperation än att skapa eller uppdatera, måste du fortfarande använda POST för att säkra data.
Eftersom HTML-formulär bara stöder GET och POST kan du inte direkt skapa ett formulär som till exempel tar bort en resurs på servern. En vanlig lösning, som respekterar REST-principerna på servern, är att använda en platshållarvariabel och låtsas att det var den ursprungliga HTTP-metoden. Till exempel:
<formmetod="posta">
<inmatningtyp="dold"namn="_metod"värde="RADERA" />
...
form>
Din kod på serversidan kan kontrollera förekomsten av denna "proxymetod"-variabel och behandla den som om det vore den verkliga metoden som användes. Till exempel i PHP:
$metod = $_SERVER["REQUEST_METHOD"];
om (array_key_exists("_metod", $_REQUEST)) {
$metod = $_REQUEST["_metod"];
}
Skickar HTTP-förfrågningar programmatiskt
Web Fetch API tillhandahåller en fetch() JavaScript-funktion som du kan använda för att skicka en HTTP-förfrågan. Den stöder alla metoder, inte bara GET och POST som HTML stöder.
Hämtningsfunktionen skickar en GET-begäran som standard. För att använda en annan metod, ange dess namn som värdet för a metod egenskap i ett objekt som du skickar som det andra argumentet.
hämta(' https://example.com/', { metod: "HUVUD" });
Du kan också skicka HTTP-förfrågningar från många serverspråk, inklusive PHP. På det språket är curl-biblioteket ett vanligt sätt att skicka sådana förfrågningar.
Curl-biblioteket har ett CURLOPT_CUSTOMREQUEST-alternativ som du kan ställa in för att ange en metod
om ($ch = curl_init($url)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'SÄTTA');
curl_exec($ch);
// ...
}
Via kommandoraden
Kommandoradsverktyget curl låter dig överföra data till eller från en server, via ett av flera protokoll. HTTP (och HTTPS) är två mycket vanliga användningsfall.
Som standard skickar curl en GET-förfrågan, vilket du kan bekräfta med följande kommando:
curl -v -s -o /dev/null example.com/get-test
Du kan se förfrågningsmetoden på den femte raden i utdata:
Du kan ändra förfrågningsmetoden som curl skickar med -X-flaggan:
curl -v -s -o /dev/null example.com/get-test -X POST
Nu skickar curl en förfrågan med POST-metoden:
HTTP har många användningsområden
Det mesta av det du gör på webben kommer att involvera vanliga GET-förfrågningar, med enstaka POST för formulärinlämningar. Men HTTP är ett mycket mer uttrycksfullt protokoll än vad detta antyder.
Några av de vanligaste metoderna speglar CRUD-modellen som gör HTTP till en utmärkt bas att bygga ett resursfokuserat API på.