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:
[email protected]: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 ● 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