HTTP-protokolla mahdollistaa erilaisten pyyntötyyppien tai metodien käytön, joilla viitataan eri tehtäviin, joita asiakas (selain) haluaa verkkosivun suorittavan. Esimerkiksi, jos käyttäjä tallentaa tietoa verkkosivulle, kuten käyttäjätietoa, on oletettavaa, että selain tekee tämän käyttäen POST-, PUT- tai PATCH-metodia. Silti, koska verkkosivun toiminta on täysin verkkosivua kehittävän tahon käsissä, voi selain tehdä tämän tallennuspyynnön käyttämällä melkeinpä mitä vaan pyyntötyyppiä, mutta tämä on hyvien käytänteiden vastaista.
HTTP-metodeja voi ajatella verkkosivun tilaa muuttavana tai luku operaatioina.
On hyvä myös ymmärtää, että näiden eri metodien käyttö vaikuttaa myös siihen missä muodossa HTTP-viestin täytyy olla.
GET-metodi
GET-metodi on ehdottomasti käytetyin HTTP-pyyntötyyppi, sekä oletusarvoinen pyyntötyyppi jonka selain lähettää, ellei selaimelle ole muuten kerrottu. Eli selain käyttää oletusarvoisesti GET-pyyntötyyppiä, esimerkiksi, kun navigoit klikkailemalla selaimessa.
GET-pyynnön avulla, selain tyypillisesti pyytää verkkosivua palauttamaan pyydetyn resurssin.
Alla esimerkki, miltä GET-pyyntö voi näyttää. Kyseinen GET-pyyntö on tapahtunut kun selain on navigoinut suoraan https://www.hakatemia.fi/.
GET / HTTP/2
Host: www.hakatemia.fi
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.72 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Connection: close
POST-metodi
Toisin kuin GET-metodi, jonka tarkoitus on hakea tietoa tai resurssi, POST-metodi on suunniteltu tiedon lähettämisen selaimesta verkkosivulle. POST-pyyntö voi sisältää HTTP-kehon, jossa tieto sijaitsee.
Alla olevassa POST-pyynnössä on esimerkki, miltä POST-pyyntö voi näyttää mm. kun kirjaudut verkkosivulle.
POST /login HTTP/1.1
Host: www.hakatemia.fi
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.72 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
kayttajatunnus=teppo.tavis@hakatemia.fi&salasana=salasana123
PUT-metodi
PUT-pyyntötyyppiä voidaan käyttää samaan tarkoitukseen kuin POST, mutta sen alkuperäinen ajatus oli olla pyyntötyyppi joka korvaa halutun resurssin toisella, eli toisin kuin POST, jonka tarkoitus oli tallentaa yksittäistä tietoa esimerkiksi käyttäjästä, PUT-pyyntötyypin ideana oli korvata kokonainen entiteetti tai resurssi toisella. Mutta kuten jo sanottu, HTTP-metodien käyttö ja verkkosivun käyttäytyminen näiden eri pyyntötyyppien kohdalla, on täysin verkkosivun kehittäjästä kiinni.
Alla olevassa PUT-pyynnössä, käyttäjä ilmoittautuu Hakatemian sähköpostilistalle.
PUT /api/email-signup HTTP/2
Host: www.hakatemia.fi
Content-Length: 41
Accept: application/json, text/plain, */*
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.72 Safari/537.36
Origin: https://www.hakatemia.fi
Referer: https://www.hakatemia.fi/
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
{"email":"teppo.tavis@hakatemia.fi"}
DELETE-metodi
DELETE-pyyntötyypin tarkoitus on yksinkertaisesti poistaa jokin resurssi tai entiteetti. Tämä saattaa olla käytössä esimerkiksi erilaisissa API-rajapinnoissa. Tästä voi lukea lisää esimerkiksi täältä.
Alla oleva DELETE-pyyntö voisi esimerkiksi poistaa käyttäjän profiilikuvan.
DELETE /kayttaja/kuvat/profiilikuva HTTP/1.1
Host: www.hakatemia.fi
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.72 Safari/537.36
Origin: https://www.hakatemia.fi
Referer: https://www.hakatemia.fi/
Connection: close
PATCH-metodi
PATCH-metodin perusajatus on tehdä osittasia muutoksia haluttuun resurssiin. Toisin kuin esimerkiksi PUT-metodin tapauksessa, PATCHin tarkoitus on muokata resurssia vain osittain.
Alla oleva PATCH-pyyntö voisi esimerkiksi muuttaa käyttäjän nimeä.
PATCH /kayttajat HTTP/1.1
Host: www.hakatemia.fi
Accept: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.72 Safari/537.36
Content-Type: application/json
Content-Length: 61
{
"kayttaja": {
"id": 12345,
"Name": "Teppo Tavis"
}
}
OPTIONS-metodi
OPTIONS-metodin tarkoitus on pyytää verkkosivulta sallittuja kommunikointitapoja kyseisen resurssin kohdalla. Verkkosivun vastaus sisältää tyypillisesti listauksen sallituista HTTP-metodeista. OPTIONS-metodia käytetään myös CORS (Cross-Origin Resource Sharing) -mekanismissa, jonka avulla verkkosivut voivat välittää tietoa selaimen kautta.
OPTIONS /kayttajat HTTP/1.1
Host: www.hakatemia.fi
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.72 Safari/537.36
Connection: keep-alive
Origin: https://www.hakatemia.fi
HEAD-metodi
HEAD-metodi pyytää verkkosivua palauttamaan täysin identtisen vastauksen kuin GET-metodin tapauksessa, mutta ilman pyydettyä resurssia. Eli verkkosivua pyydetään palauttamaan ainoastaan vastauksen tilakoodi sekä otsakkeet.
HEAD / HTTP/2
Host: www.hakatemia.fi
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.72 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Connection: close
HTTP-pyyntötyyppejä on useita, ja kuten yllämainituista metodeista selviää, näiden käyttötarkoitukset ovat osittain hyvin samanlaisia, eikä riskiä koidu jos kehittäjä päättää käyttää esimerkiksi PUT-metodia, POST-metodin sijaan, tiedon tallentamiseen. Nämä ovat kuitenkin vain pyyntöjä, joita selain lähettää verkkosivulle toivoen tiettyä vastausta. Teoriassa on täysin mahdollista rakentaa verkkosivu, joka käyttäytyy täysin päinvastoin kuin HTTP-protokollaa on tarkoitettu käytettävän. Tämä on täysin kehittäjästä kiinni.
Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.
Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.