Webes alapozás url, http, szerver oldal
http://localhost:8080/demo1/default.cshtml? name=vision%20-%20software;param2=value2#section1
URI, URL, URN "Egységes erőforrás-azonosító" schema name : schame specific part URL: úgy azonosít erőforrásokat, hogy azt is megmondja, hogyan lehet elérni (pl: http://www.prog.hu) URN: név szerint azonosít (pl: urn:isbn:1234567890)
Demo tr:52694
URL darabokban foo://username:password@example.com:8042/over/there/index.dtb? type=animal&name=narwhal#nose schema name: hogyan kell értelmezi a kettős pont utáni részt userinfo: azonosítás, ha szükséges (nem túl biztonságos) hostname: távoli szerver címe (lehet IP is) port: csatlakozási pont, schema definiálhat alapértelmezett portot (http=80, https = 443 (65535)) path: távoli számítógépen a kért dokumentum elérése query: paraméterek (kb. mint a command line) fragment: ez nem kerül tovább küldésre, ezt a kliens használja (pl: könyvjelző, menü, ajax applikációk) Ez egy abszolút cím, de léteznek relatív címek, ha már egy kontextuson belül vagyunk:../.. /imags/smiley.png
URL encodolás és dekodolás Miért van rá szükség? Bizonyos karakterek más jelentéssel bírnak (&=/) Bizonyos karakterek nem lehetnek részei (<32) Kódolás Jelentése megmarad a-za-z 0-9.-~_ Konvertálás space = + %20, %2F (% hexadecimálisan a karakter)
Hostname feldoldás DNS UDP Root és top level domain Fa struktúra Dns rekord http://www.dnsquery.org etc/hosts fájl
Csatlakozzunk távoli számítógépekhez TCP, UDP, PORT, IPv4,IPv6 Demo Telnet Szöveges protokolok (pl: http, smtp, ftp) Tűzfal, DMZ
Demo Kliens - Szerver kommunikáció
Demo Töltsünk le fájlokat
HTTP kérés-válasz alapú kliens-server felépítésű mindig a kliens kezdeményez szöveges tetszőleges tartalom feltöltése/letöltése Jelenleg 1.1 RFC2616 (1999)
HTTP - Request Felépítés Request line (METHOD URL VERSION CRLR) Headers: kulcs érték párok CRLR [Message-body]
HTTP - Response Felépítés Status line (VERSION STATUS REASON CRLR) Headers: kulcs érték párok CRLR [Message-body]
HTTP - Státusz kódok 1xx - Információ 2xx - Sikeres állapot jelző 200 - sikeres 3xx - átirányítás 301 - végleges átirányítás 302 - átirányítás 304 - nem módosult 4xx - kliens oldali hiba 401 - jogosulatlan elérés (basic, digest auth) 403 - tiltott 404 - oldal nem található 5xx - serveroldali hiba
HTTP - Népszerűbb fejek Content-Type Content-Length Location User-Agent Accept-* Host Set-Cookie/Cookie Etag/Last-Modified X-Requested-With
HTTP - Metodusok GET Információ lehívás (Biztonságos - cachelhető) Többszöri végrehajtásuk ugyanazt az erdményt adja POST Információ közlés Request rendelkezi body-val Fejlécek kiterjeszthetőek (de nem minden összetevő támogatja)
Demo nézzünk bele mások beszélgetéseibe
HTTP - további tulajdonságai Cachelést vezérlő fejlécek Átirányítást szabályozó fejlécek További metodusok (HEAD, TRACE, DELETE, OPTIONS) Authentikáció (Basic és Digest alapokon) Kapcsolat újrafelhasználás Streamelés Több kérés a válasz bevárása nélkül (Http pipelinging) Válasz tetszőleges darabkájának letöltése (Byte serving) Tömörített adatétvitel Tetszőleges tartalom közlése
Résztvevők Proxy (Shared cache) Forward Reverse Robotok - kereső/adatgyűjtő (robots.txt) Webszerver Bongésző
Dokumentum generálás Különböző megoldások CGI PHP ASP ASP.NET Web Pages, MVC, Web Forms Egyéb ismert: Python Ruby on Rails Perl JSP, Java servlet
Common Gateway Interface Külön processként fut Bármilyen nyelven írt programmal használható Program szabványok ki/be- meneteit használja Környezeti változók Webszerver és a program közötti kommunikációt írja le Minden kérésnél elindítja és le is állítja a programot (pazarló) Manapság inkább FastCGI-t használnak, ami főleg elődje teljesítmény hibáit próbálja meg javítani úgy, hogy a futtatott alkalmazás a memóriában marad és több kérés egyidejű kiszolgálását is támogatja.
PHP Dinamikus script nyelv FastCGI ként futtatható (apache esetén modulban is) HTML oldalak amik PHP kódot tartalmaznak <?php...?> Hatalmas függvény könyvtár (akár többféle képpen is) Xml kezelés Képkezelés Hálózati rétegek (Smtp, Socket, Http, Ftp) Webszolgáltatás Adatbázis kezelés (PDO)... Nem csak web programozás (desktop, automatizálás) Sok mellékhatás és varázslat
Active Server Pages Script alapú JScript és VBScript-el programozható HTML-be ágyazott scriptek futtatása server oldalon Nem külön programként fut, modulként épül be ActiveX-eket használ ASP.NET elődje, Classic ASP néven is ismert, nincs köze. NET-hez
ASP.NET Nem script alapú,.net-re fordított program IIS6 külön processként fút IIS7 beépült az IIS-be Applikációként fút, egy AppDomain! Bármilyen.NET nyelv-en programozható ASP.NET Pipeline HttpApplication IHttpModule IHttpHandler Speciális könyvtárak Állapotok Application, Cache
ASP.NET Web Pages HTML-be ágyazott VB vagy C# kód amiből.net assembly generálódik Razor szintaktika Tiszta, kontrollálható kimenet Ez a legújabb őrület, PHP ellenfelének készült Webmatrix része Nincs viewstate és nincs postback!
ASP.NET MVC MVC mintára épül Tiszta és teljesen kézbentartható a generált dokumentum kimenete Depandency Injection támogatás Több megjelenítési réteg támogatása (MVC 3-tól razorral is) TDD támogatás Model binding és validáció ASP.NET Routing (tiszta url-ek) Könnyebb kliens script integráció Nincs viewstate és nincs postback!
ASP.NET Web Forms Window Forms programozás inspirálta Szerver oldali DOM RAD, könnyű fejlesztés Állapotok kibővülnek a Viewstate-el Többféle megjelenítés (Theme) Eseménykezelés Validáció "Page Life Cycle" Adatkötés
Demo Dokumentumok előállítása különböző platformokkal
Demo Játék a formokkal
Web framework elvárások Ajax, Valamilyen Pattern az UI leválasztására (MVC, MVP, MVVM), Többnyelvűség, Form validáció, Template, Cache, Configurálhatóság, Authentikáció, Adat elérés támogatása, Modularizálhatóság, SEO, Widgets, Kiterjeszthetőség, IDE support, hibakeresés, Deployment, (web service support), Url optimalizálhatóság, Sablonizálhatóság, Aszinkron feladat végrehajtás, Állapot kezelés
Biztonság Inputok Kliens oldali ellenőrzés "kikapcsolható" Befecskendezés (SQL, Parancs, Elérési út,...) Külső helyről származó adatok (XSRF) Feltétel vizsgálat Output XSS Adat gyűjtés (Email,...) Session lopás
Optimalizálás Kérések számának csökkentése Kliensoldali logika Kevesebb erőforrás hivatkozás (Sprite, konkatenálás) Böngésző cache Alkalmazás logikájának javítása Válasz méretének/előállítás csökkentése Tömörítés Ajax Proxy/Server oldali cache Aszinkron műveletek Párhuzamos letöltések számának nővelése: sub-domain
Fejlesztés Újra felhasználható elemek Visszamenőleg kompatibilitás Egy adott program rész átírásnál figyelni kell, hogy a régi módszernek is eleget tegyen. Tudni kell, a felépítését és a működést Nem biztos, hogy minden kontroll bárhol megállja a helyét Példa: Regisztráció, session timeout, ügyintézőnév 43 áruház, 27 partner (több mint 200 klón áruház) 5.5 fejlesztő + 1 tesztelő + 1 supportos
Szerszámosláda Http, TCP/IP, URI, URL, XML, XPath, XSLT, DTD, XSD, RSS, Atom, JSON, JSONP, HTML, CSS, JavaScript, SVG, XSS, XSRF, AJAX, SOAP, XML-RPC, REST, WSDL, RSA, PKI, MD5, SHA1, DNS, Domain, Streaming, Cloud, Mashup, SSO, SEO, OAuth, SSL, robots.txt, Flash, Silverlight, JavaFX, JavaApplet, ActiveX
Ez az utolsó dia! végre vége