Hypertext Transfer Protocol (HTTP) je komunikacijski protokol, ki se na internetu uporablja za komunikacijo med spletnimi strežniki (npr. spletno stranjo) in odjemalci (npr. tvojim brskalnikom).
HTTP deluje po modelu odjemalec–strežnik: odjemalec strežniku pošlje zahtevo, strežnik pa odjemalcu na podlagi zahteve vrne določen odgovor. Ta zahteva je lahko karkoli, od poizvedbe po spletni strani do ustvarjanja uporabniškega računa na podlagi navedenega uporabniškega imena in gesla. Posamezne zahteve so med seboj neodvisne: na eno zahtevo pride en odgovor.
Poleg HTTP v spletnih naslovih pogosto naletimo tudi na protokol HTTPS. To je kratica za Hypertext Transfer Protocol Secure in pomeni, da je komunikacija opremljena z dodatno varnostno plastjo, zato je zlonamerni akterji ne morejo zlahka prestreči. V prejšnjem prispevku o SSL smo razložili, kaj točno to pomeni in kako deluje. Pomembno je vedeti, da vse, o čemer govorimo v tem članku, velja tudi za HTTPS.
Zahteve HTTP je mogoče uporabiti za številne različne namene, vsakega pa označuje lasten, tako imenovani »način« (metoda). Od teh metod se pogosto uporablja le nekaj izbranih, in te je pomembno poznati. Najbolj razširjena metoda je tista, s katero si tudi ti prišel na ta blog: metoda GET. Ta metoda je, kot pove že ime, namenjena pridobivanju informacij s strežnika. Eno je poslal tvoj brskalnik, ko si kliknil povezavo, da bi prebral ta članek, da bi pridobil HTML te spletne strani.
Če želiš spletnemu strežniku poslati informacije, na primer za prijavo v račun ali izpolnitev obrazca, uporabiš metodo POST. Drugi dve pogosto uporabljeni metodi sta PUT in DELETE. PUT je zelo podoben POST, vendar ni namenjen ustvarjanju novih zapisov, temveč posodabljanju obstoječih, DELETE pa je, kot si morda že uganil, namenjen zahtevi za brisanje določenih podatkov.
Kako pa se te metode natančno uporabljajo pri pošiljanju zahteve?

Zgornja slika prikazuje vizualno predstavitev zahteve HTTP. Na prvi pogled se morda zdi zastrašujoča, vendar jo bomo razčlenili in si ogledali posamezne dele. To je zahteva strežniku, ki obdela besedilo, ki ga navedemo, in nam v tem primeru vrne stran HTML z našim besedilom v naslovu. Prvi del zahteve, ki jo pošljemo temu strežniku, je vrstica zahteve, ki jo sestavljajo trije deli: metoda, cilj in različica protokola. Ta vrstica strežniku pove, katero dejanje želimo izvesti, na katerem cilju naj se to dejanje izvede in, da ne bi prišlo do nesporazumov, kateri natančen protokol želimo uporabiti za komunikacijo. V našem primeru je to zahteva GET, saj želimo pridobiti stran HTML. To zahtevo pošljemo na (izmišljeno) končno točko /test z različico protokola HTTP 1.1.
Sledijo glave. Glave zahteve lahko razumemo kot metapodatke, ki strežnik obveščajo o zahtevanih podatkih in o odjemalcu, ki pošilja zahtevo. Te glave je mogoče nadalje razdeliti v kategorije, a jih bomo zdaj prezrli. V naši zahtevi moramo poslati več glav, da strežniku povemo, kakšna je naša zahteva, prek glav Content, in kaj pričakujemo v odgovoru, prek glav Accept. Glava host zagotavlja, da zahteva pride na pravi strežnik.
Glava User-Agent strežniku pove, na kakšni napravi smo in kateri brskalnik uporabljamo. Ta glava je pri vsaki vrsti naprave videti drugače, običajno pa se začne z Mozilla/5.0, kar pomeni, da je brskalnik združljiv z Mozillo. To je le majhen izbor možnih glav, ki jih lahko pošljemo z zahtevo. Za celoten pregled si oglej Mozillino dokumentacijo o glavah HTTP.
Na koncu, od glav ločeno z eno prazno vrstico, sledi telo zahteve. To ni obvezno, saj pri vsaki zahtevi strežniku ni treba poslati vsebine, v našem primeru pa želimo poslati nekaj besedila, ki se prikaže kot naslov. To je zelo preprost primer, telo zahteve je lahko precej bolj zapleteno, tudi z več viri.
Po obdelavi zahteve strežnik vrne odgovor. Če je zahteva uspešna, je odgovor lahko videti takole:

Zgradba odgovora HTTP je zelo podobna zahtevi. Začne se z vrstico stanja, ki odjemalca s kodo stanja in dodatnim sporočilom o stanju obvesti, katera različica HTTP se uporablja in kako je bila zahteva obravnavana. Te kode stanja je mogoče razvrstiti v pet kategorij in kažejo uspeh ali neuspeh zahteve. Ker je bila naša zahteva uspešna, smo dobili kodo stanja 200 z besedilom »OK«, kar pomeni, da je vse potekalo po načrtu. To in druge kode stanja je mogoče najti v naših podatkih, v katerih shranimo odgovorne kode in glave vseh spletnih strani, ki jih pregledamo.
Vrstici stanja sledijo glave odgovora, ki dajejo informacije o strežniku in vrnjeni vsebini. Ta vsebina je od glav spet ločena s prazno vrstico in v našem primeru vsebuje zgradbo HTML spletne strani skupaj z besedilom, poslanim strežniku, v naslovu.
Upamo, da zdaj veš nekaj več o zapleteni naravi interneta in o tem, kaj se dogaja v zakulisju, ko obiščeš svoj najljubši blog z recepti ali posodobiš profil na LinkedInu.