Perusteet haltuun

HTTP-metodit

Helppo
15 min

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/.

HTTP-Pyyntö
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.

HTTP-Pyyntö
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.

HTTP-Pyyntö
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.

HTTP-Pyyntö
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ä.

HTTP-Pyyntö
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.

HTTP-Pyyntö
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.

HTTP-Pyyntö
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.

http-metodit

Käynnistä tehtävä ja suorita verkkosivua vasten HTTP-pyyntöjä käyttäen kolmea erilaista HTTP-metodia.

  • GET
  • OPTIONS
  • HEAD

Tehtävät

Flag

Löydä lippu (flag) labraympäristöstä ja syötä se alle.

hakatemia pro

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ä.