🌍 Kako Funkcioniše Web?
Kada u browser unesete adresu (npr. https://bhas.gov.ba/), dešava se niz kompleksnih
procesa u pozadini koji omogućavaju da vam se prikaže stranica. Ovaj proces traje milisekunde, ali
uključuje komunikaciju između vašeg računara i servera širom svijeta.
Ciklus zahtjeva: Od browsera do servera i nazad
1. DNS (Domain Name System)
Računari ne razumiju imena kao što je google.com. Oni komuniciraju koristeći IP
adrese (npr. 142.250.180.206).
DNS je imenik interneta koji prevodi ljudima razumljiva imena (domene) u IP adrese.
- Browser Cache: Browser prvo provjerava da li već zna IP adresu.
- OS Cache: Ako browser ne zna, pita operativni sistem.
- DNS Resolver: Ako ni OS ne zna, šalje se upit DNS serveru (obično vašem ISP-u ili Google-ovom 8.8.8.8).
2. HTTP Protokol
Nakon što browser dobije IP adresu, on uspostavlja konekciju sa serverom i šalje HTTP Zahtjev (Request). HTTP (HyperText Transfer Protocol) je jezik kojim browser i server razgovaraju.
GET /index.html HTTP/1.1
Host: bhas.gov.ba
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/10.0
...sadržaj stranice...
🖥️ Web Serveri
Web server je softver koji sluša zahtjeve na određenom portu (obično 80 za HTTP ili 443 za HTTPS) i vraća traženi sadržaj.
| Server | Platforma | Opis |
|---|---|---|
| IIS (Internet Information Services) | Windows | Microsoftov server. Duboko integrisan sa Windowsom. Pokreće ASP.NET aplikacije. |
| Apache | Linux/Windows | Najstariji i vrlo popularan open-source server. Koristi se često za PHP (LAMP stack). |
| Nginx | Linux/Windows | Poznat po visokim performansama. Često se koristi kao Reverse Proxy. |
| Tomcat | Cross-platform | Server za Java aplikacije (Servlets/JSP). |
🚀 Kestrel i Reverse Proxy
U modernom .NET svijetu (.NET Core, .NET 5+), stvari funkcionišu malo drugačije. ASP.NET Core aplikacije po defaultu koriste Kestrel - super-brzi, cross-platform web server ugrađen u samu aplikaciju.
🔄 Reverse Proxy Konfiguracija
Iako je Kestrel brz, nije dizajniran da bude direktno izložen internetu (security hardening, upravljanje certifikatima). Zato se ispred njega postavlja "tradicionalni" server (IIS na Windowsu ili Nginx na Linuxu) koji djeluje kao Reverse Proxy:
- Zahtjev dolazi na IIS (Port 80/443).
- IIS prosljeđuje zahtjev lokalno na Kestrel (npr. localhost:5000).
- Kestrel obrađuje C# logiku i vraća odgovor IIS-u.
- IIS vraća odgovor korisniku.
Node.js i Moderni Web
Slično kao Kestrel, Node.js aplikacije su procesi servera koji "slušaju" na portu. Za razliku od klasičnog statičkog sajta (gdje server samo šalje fajl sa diska), Node.js (i ASP.NET) izvršava kod za svaki zahtjev. To omogućava dinamički sadržaj, API pozive i komunikaciju sa bazom u realnom vremenu.
📜 Evolucija ASP.NET-a: Od Web Forms do MVC-a
Razumijevanje historije razvoja web tehnologija unutar Microsoft ekosistema ključno je za shvaćanje zašto danas koristimo arhitektonske šablone poput MVC-a (Model-View-Controller). Razvoj weba nije bio pravolinijski, već je prolazio kroz različite faze prilagođavanja potrebama programera i kompleksnosti samog weba.
1. Classic ASP (Jezivi kod - "Spaghetti Code")
U najranijim danima dinamičkog weba, Microsoft je predstavio Active Server Pages
(ASP). Ovaj pristup omogućavao je ugrađivanje VBScript ili JScript koda direktno
unutar HTML stranica. Format fajlova je bio .asp. Iako je to bila revolucija u to
vrijeme jer je omogućavalo dinamiku, vrlo brzo su se pojavili ozbiljni problemi sa održavanjem.
Struktura fajlova je bila takva da su logika za pristup bazi podataka, HTML struktura i poslovna logika bili izmiješani u jednom fajlu. Ovo je rezultiralo kodom poznatim kao "Spaghetti kod" – izuzetno teškim za čitanje, debagovanje i testiranje kako su aplikacije rasle.
2. ASP.NET Web Forms (Revolucija za Windows programere)
Prepoznajući probleme Classic ASP-a, Microsoft je sa dolaskom .NET platforme 2002. godine predstavio ASP.NET Web Forms. Cilj je bio jasan: omogućiti ogromnom broju Windows desktop programera (koji su koristili Visual Basic i tehnologije poput WinForms-a) da brzo i bezbolno pređu na razvoj web aplikacija, bez dubinskog poznavanja HTTP protokola, HTML-a i JavaScript-a.
Arhitektura Web Forms-a:
Web Forms je uveo koncept zasnovan na komponentama (kontrole) i događajima (Event-driven
model). Svaka web stranica (.aspx) imala je svoj prateći kod fajl
(Code-Behind fajl, npr. .aspx.cs).
- Kontrole na serveru (Server Controls): Programeri su prevlačili
(drag-and-drop) kontrole poput dugmadi (
<asp:Button>) ili tabela na formu, slično onome kako su to radili u Windows aplikacijama. Ove kontrole su se zatim automatski renderovale u HTML (ponekad veoma neuredan i složen). - Događaji (Events): Kada korisnik klikne dugme, aktivira se događaj (npr.
Button1_Click) u C# Code-Behind fajlu. Cijela logika stranice se izvršavala kroz ove događaje. - ViewState: Kako HTTP protokol po svojoj prirodi "ne pamti" stanje (stateless), Web Forms je morao simulirati "pamćenje" stanja forme između zahtjeva kako bi zadržao vrijednosti kontrola. Ovo je postignuto pomoću ViewState-a, ogromnog kriptovanog stringa proslijeđenog kroz skrivena HTML polja. Ovo je omogućilo lako programiranje, ali po cijenu ogromne veličine stranice i lošijih performansi.
3. ASP.NET MVC (Povratak kontroli i "Čistom Web-u")
Iako je Web Forms bio nevjerovatno popularan i koristan u enterprise okruženjima (mnoge stare javne aplikacije i danas koriste Web Forms), s vremenom su njegovi nedostaci postali prepreka u modernom web razvoju, gdje su performanse, čišći HTML i odvojene odgovornosti postali imperativ.
Microsoft je 2009. godine odgovorio lansiranjem ASP.NET MVC (Model-View-Controller). MVC nije nasljednik Web Forms-a u smislu nadogradnje, već potpuno drugačija paradigma i alat za izgradnju web aplikacija.
Ključne razlike između Web Forms i MVC arhitekture:
- Razdvajanje odgovornosti (Separation of Concerns
- SoC):
Web Forms: Fokus na stranicama. Logika i UI su bili tijesno vezani kroz Code-Behind fajlove.
MVC: Striktno odvaja aplikaciju u tri komponente: Model (podaci i biznis pravila), View (UI/HTML prikaz) i Controller (obrada HTTP zahtjeva i upravljanje tokovima). Ovo omogućava bolju organizaciju i saradnju timova. - State Management (Upravljanje stanjem):
Web Forms: Oslanjao se masovno na State Management tehnike, primarno ViewState, kako bi sakrio stateless prirodu web-a od programera, što je često rezultiralo ogromnim page payload-om.
MVC: Nema ViewState! MVC se vraća prirodi web-a poštujući HTTP. Programer ima potpuno razumevanje i eksplicitnu kontrolu nad time koji se podaci prenose (koristeći parametre forme, query stringove itd.). - Kontrola nad generisanim HTML-om:
Web Forms: Server kontrole su automatski generisale HTML kôd, što je značilo da dizajneri i front-end programeri nisu imali preciznu kontrolu nad ispisom. Često je rezultat bio nepotreban HTML na stranici.
MVC: Omogućava apsolutnu kontrolu nivoa svakog HTML taga i CSS klase. Vi pišete HTML, onakav kakav treba da bude, čineći integraciju modernih client-side biblioteka (kao Bootstrap, jQuery, ili Vue/React) jednostavnom. - Testabilnost (Unit Testing):
Web Forms: Pošto su komponente bile direktno zavisne o ASP.NET HTTP pipeline-u (kontekstu zahteva), bilo je izuzetno kompleksno izolovano testirati logiku (Unit Testiranje nezavisno od servera).
MVC: Controlleri su obične C# klase, što znači da je njihove metode (akcije) moguće jednostavno izolovati, instancirati u test projektu i provjeriti njihov povratni rezultat, omogućavajući test-driven development (TDD) pristup.
🕰️ Historija .NET Framework-a
Da bismo razumjeli zašto danas postoje ".NET Framework", ".NET Core" i samo ".NET", moramo pogledati historiju.
Evolucija .NET-a: Od Windows-only do Cross-Platform
🔑 Ključne Prekretnice
- .NET Framework 1.0 - 4.8 (2002-2019): Dizajniran samo za Windows. Stabilan, zreo, ali vezan za OS. Na ovome radi većina starih javnih aplikacija.
- .NET Core 1.0 - 3.1 (2016-2019): Potpuni "rewrite". Radi na Linuxu, Mac-u i Windowsu. Brži, lakši, modularniji.
- .NET 5+ (2020-danas): Ujedinjenje. Nema više "Core" u imenu, to je sada samo ".NET". Ovo je budućnost platforme.