Kako radi web server

Lekcija 3 od 8 · Osnove weba

Web server je program koji stalno „sluša“ na jednom portu, prima HTTP zahteve i vraća odgovore. U ovoj lekciji vidimo šta tačno radi, po čemu se razlikuje server za statičke i za dinamičke strane – i pokrećemo sopstveni server na svom računaru.

Pre nego što počneš: potrebno predznanje – kako radi internet, osnove Python-a (za primere servera).
Kako da učiš: svaki primer isprobaj u pregledaču ili komandnoj liniji i uradi vežbe iz lekcije. Primeri su u HTML-u, JavaScript-u i Python-u; za većinu je dovoljan pregledač, a za Python primere instaliran Python 3.

Šta je web server

Reč „server“ ima dva značenja: računar (mašina u data centru) i program na njemu. Web server kao program radi u petlji:

  1. čeka zahtev na portu (80 za http, 443 za https);
  2. pročita zahtev: metodu (GET, POST…) i putanju (/index.html);
  3. odluči šta da vrati: fajl sa diska ili rezultat programa;
  4. pošalje odgovor sa statusnim kodom (200, 404…) i sadržajem;
  5. vrati se na korak 1.

Jedan server opslužuje mnogo korisnika istovremeno – zahtevi se obrađuju paralelno ili jedan za drugim, vrlo brzo.

Poznati web serveriKoristi se za
Nginx, Apachestatičke fajlove i prosleđivanje zahteva aplikacijama
Kestrel (ASP.NET Core)C# web aplikacije
Gunicorn, UvicornPython aplikacije (Django, Flask, FastAPI)
Node.js (Express)JavaScript na serveru

Statički i dinamički odgovori

StatičkiDinamički
šta server radipronađe fajl na disku i pošalje gapokrene kod koji napravi odgovor
primer zahtevaGET /slike/logo.pngGET /rezultati?razred=7
isti za sve korisnikedane – zavisi od korisnika, vremena, baze
brzina i cenavrlo brzo i jeftinozahteva više resursa
primerovaj sajt sa lekcijama (Astro → gotovi HTML fajlovi)Petlja: tvoja rešenja, rezultati, prijava

Mnogi moderni sajtovi se prave unapred: alat (npr. Astro, Hugo) od šablona i tekstova napravi hiljade gotovih HTML fajlova, a server ih samo šalje. Tako radi i svetprogramiranja.com.

Pokreni sopstveni server (Python)

Za statičke fajlove dovoljna je jedna komanda. Napravi folder sa fajlom index.html, otvori komandnu liniju u tom folderu i pokreni:

python -m http.server 8000

Zatim u pregledaču otvori http://localhost:8000. U komandnoj liniji videćeš svaki zahtev, na primer "GET / HTTP/1.1" 200 i "GET /favicon.ico HTTP/1.1" 404 – pregledač je sam zatražio ikonicu koje nema. Server se zaustavlja sa Ctrl+C.

Dinamički server pravi odgovor kodom. Najmanji primer bez dodatnih biblioteka:

from http.server import BaseHTTPRequestHandler, HTTPServer
from datetime import datetime

class Obrada(BaseHTTPRequestHandler):
    def do_GET(self):                       # poziva se za svaki GET zahtev
        if self.path == "/":
            telo = f"<h1>Zdravo!</h1><p>Sada je {datetime.now():%H:%M:%S}</p>"
            self.send_response(200)          # status: OK
        else:
            telo = "<h1>404 – nema te strane</h1>"
            self.send_response(404)          # status: Not Found
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.end_headers()
        self.wfile.write(telo.encode("utf-8"))

HTTPServer(("localhost", 8000), Obrada).serve_forever()

Svako osvežavanje stranice http://localhost:8000 prikazuje novo vreme – odgovor nastaje u trenutku zahteva. To je suština dinamičkog servera. U pravim projektima ovo se piše pomoću framework-a (Flask, Django, ASP.NET Core), koji brinu o putanjama, šablonima i bezbednosti.

Gde rade pravi serveri

NačinOpisPrimer
sopstveni računarza razvoj i probu (localhost)python -m http.server, dotnet run
statički hostingsamo gotovi fajlovi, često besplatnoGitHub Pages, Netlify, Render (static site)
platforma za aplikacije (PaaS)postaviš kod, platforma pokreće serverRender, Railway, PythonAnywhere, Azure App Service
virtuelni server / oblakceo računar u data centru pod tvojom kontrolomAWS, Google Cloud, Azure, Hetzner

Postavljanje aplikacije na server zove se deploy. Ranije popularna besplatna platforma Heroku više nema besplatan paket (od 2022), pa se za učeničke projekte danas češće koriste Render i PythonAnywhere.

Video: web server u praksi

Bez obzira na jezik, princip je isti: zahtev → obrada → odgovor. Kako se statičke strane serviraju u C#-u: Servisiranje statičkih web strana pomoću web servera.

Česte greške i saveti
  • Port 8000 je proizvoljan – ako je zauzet, uzmi 8080 ili 5000.
  • localhost server vidi samo tvoj računar; drugi u mreži ga vide preko tvoje lokalne IP adrese (ako to dozvoli zaštitni zid).
  • Server koji radi „zauvek“ se zaustavlja sa Ctrl+C u komandnoj liniji.

Proveri znanje

Otvori kviz

Web server

1. Šta radi statički web server?




2. Koju adresu otvaraš posle komande python -m http.server 8000?




3. Kako se zove postavljanje aplikacije na server?