MODUL 1 - LEKCIJA 1

Osnove Weba, DNS i HTTP Protokol

Dubinsko razumijevanje mrežne komunikacije: Kako tačno funkcioniše relacija Klijent-Server, proces DNS rezolucije i sirovi format HTTP poruka.

⏱️ Trajanje: ~45 min 📚 Nivo: Početni / Srednji 🎯 Koncepti: HTTP, DNS, IP, TCP, REST koncept, HTTPS

🌐 Kako sistemi zapravo razgovaraju?

Bilo da korisnik otvara portal u svom pretraživaču, ili backend server - komunicira se sa centralnim registrom preko API-ja, osnovni mehanizam je isti: Klijent-Server arhitektura obavijena preko HTTP protokola.

🏛️ Internet vs Intranet u Javnom Sektoru

U javnoj upravi često se pravi striktna razlika između Interneta i Intraneta, iako koriste apsolutno iste protokole i tehnologije (IP, TCP, HTTP):

  • Internet: Javna mreža. Javni portali (npr. vlada.gov.ba) su izloženi ovdje i svako iz svijeta im može pristupiti.
  • Intranet (Zatvorena mreža): Privatna infrastruktura (npr. SDT mreža). Serveri sa osjetljivim bazama podataka fizički nemaju izlaz na globalni internet, čime se hakerima onemogućava direktan napad. Službenici pristupaju sistemu koristeći lokalne IP adrese (npr. 10.0.x.x).

🌍 DNS (Domain Name System) detaljno

Računari ne prepoznaju slova, oni komuniciraju isključivo pomoću IP adresa (IPv4: 142.250.180.14 ili IPv6: 2607:f8b0::200e). Stoga, prije nego što "pošalje" zahtjev, softver mora "prevesti" ljudima čitljivo ime domene u IP adresu.

Browser (Klijent)
Traži: iddeea.gov.ba
1. Upit (Gdje je iddeea?)
2. Odgovor (IP: 195.222.x.x)
DNS Server
(Imenik Interneta)
3. HTTP Zahtjev na 195.222.x.x
4. HTTP Odgovor (HTML/JSON)
Web Server
(Aplikacija)

DNS zapisi su presudni za administraciju sistema. Najvažniji su:

📡 HTTP Protokol: Jezik Weba i APIs

HTTP (HyperText Transfer Protocol) je protokol o baziran na tekstualnim porukama. Svaki "razgovor" se sastoji tačno iz dvije komponente: Request (Zahtjev klijenta) i Response (Odgovor servera).

1. Anatomija HTTP Zahtjeva (Request)

Kada kliknete "Pošalji Zahtjev" na web formi (npr. login), vaš browser generiše i šalje čist tekst prema serveru. On izgleda ovako:

🌐 Sirovi HTTP POST Zahtjev
POST /api/zahtjevi/submit HTTP/1.1
Host: api.vlada.gov.ba
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI...
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

{
  "jmbg": "1234567890123",
  "tipZahtjeva": "IzvodIzMaticneKnjigeRodjenih"
}

Komponente zahtjeva:

Tabela HTTP Metoda

Metoda Svrha u CRUD terminologiji Ima Tijelo (Body)?
GET Čitanje/Dohvaćanje podataka (Read) Ne
POST Kreiranje novog zapisa (Create) Da
PUT / PATCH Ažuriranje postojećeg zapisa (Update) Da
DELETE Brisanje zapisa (Delete) Ne

2. Anatomija HTTP Odgovora (Response)

Server obrađuje podatke (npr. upiše ih u bazu) i šalje striktno formatiran odgovor nazad klijentu.

✅ Sirovi HTTP Odgovor
HTTP/1.1 201 Created
Date: Mon, 27 Jul 2026 12:28:53 GMT
Content-Type: application/json
Server: Microsoft-IIS/10.0

{
  "status": "success",
  "brojProtokola": "01-14-1234/26",
  "poruka": "Zahtjev je uspješno obrađen."
}

Najvažniji dio odgovora je Statusni Kod, koji jasno ukazuje na uspjeh ili grešku operacije.

Klasifikacija Statusnih Kodova

  • 2xx (Uspjeh): 200 OK (Sve u redu), 201 Created (Novi resurs je uspješno sačuvan u bazu).
  • 4xx (Greška na strani Klijenta): Klijent je poslao nešto loše.
    400 Bad Request (Poslana polja ne prolaze validaciju), 401 Unauthorized (Token je istekao), 403 Forbidden (Korisnik nema ovlaštenja da briše tuđi dosije), 404 Not Found (Putanja ili dokument u bazi ne postoji).
  • 5xx (Greška na strani Servera): Klijent je poslao ispravan zahtjev, ali se server srušio.
    500 Internal Server Error (Programski kod je bacio Exception), 503 Service Unavailable (Server je preopterećen ili ugašen zbog održavanja).

🔒 HTTPS (HTTP Secure) i Certifikati

Zahtjev prikazan iznad, ukoliko ga šaljemo putem standardnog HTTP-a, prolazi kroz destine rutera na internetu potpuno čitljiv (Plaintext). Hakeri na istoj Wi-Fi mreži ga mogu bez problema pročitati pomoću alata kao što je Wireshark. Zato danas apsolutno moramo koristiti HTTPS, posebno u zdravstvu i javnoj upravi.

HTTPS koristi TLS (Transport Layer Security) protokol. Prije nego što se pošalje ijedan bit HTTP teksta, Klijent i Server dogovaraju tajni ključ. Cijela poruka se tada kriptuje tom enkripcijom, i kroz mrežu putuje kao niz neprepoznatljivih znakova (npr. ^&*(#HJB123hj!@#). Samo pravi server, koji ima tajni ključ dogovoren sa vašim browserom, ga može dekriptovati. Povjerenje se obezbjeđuje tehničkim garancijama izdatim od strane Certifikacionih Tijela (CA).


💻 Praktičan primjer: C# HttpClient

Kako mi kao programeri na zadnjem kraju (Backend) ili u desktop aplikacijama pozivamo ove servise? U .NET-u koristimo modernu i robusnu klasu HttpClient:

💻 Očitavanje API-ja iz .NET Aplikacije
using System.Net.Http;
using System.Text.Json;

// HttpClientFactory je best practice u ASP.NET Core-u
public class PorezniServis 
{
    private readonly HttpClient _client;
    
    public PorezniServis(HttpClient client)
    {
        _client = client;
        _client.BaseAddress = new Uri("https://api.porezna.gov.ba");
        // Dodajemo Security Header za svaki zahtjev
        _client.DefaultRequestHeaders.Add("Authorization", "Bearer mY_S3cr3t_T0k3n"); 
    }

    public async Task<Obveznik> DohvatiPoreznogObveznika(string jmbg)
    {
        // 1. Šaljemo HTTP GET Request na endpoint /api/obveznici/123456...
        HttpResponseMessage response = await _client.GetAsync($"/api/obveznici/{jmbg}");
        
        // 2. Ako server vrati HTTP 404 ili 500, baci Exception!
        response.EnsureSuccessStatusCode(); 
        
        // 3. Pročitaj tijelo odgovora kao string (JSON podaci)
        string jsonBody = await response.Content.ReadAsStringAsync();
        
        // 4. Pretvori JSON string nazad u C# objekat "Obveznik"
        return JsonSerializer.Deserialize<Obveznik>(jsonBody);
    }
}