Capitolul 1 - Cum functioneaza o aplicatie Web
Introducere
Inainte de a intelege ce poate face o aplicatie C# trebuie inteles ce se intampla cu o cerere web in general. Deoarece in majoritatea cazurilor o aplicatie web este o simpla combinatie de pagini HTML si pagini dinamice mult mai complexe, trebuie inteles cum rezolva serverul cererile ce nu necesita cod. O cantitate insemnata de negociere si transfer de date se intampla inainte ca cererea utilizatorului sa ajunga la cod.
O aplicatie web este impartita in cel putin doua parti – clientul si serverul. Scopul acestui capitol este de a arata cum comunica clientul si serverul. In plus, se va arata cum C# se integreaza in acest proces de comunicatie.
Cum functioneaza o cerere Web
O cerere web are necesita doua componente: un server web si un client. Clientul este in marea majoritate un browser, dar poate fi si alt tip de program, cum ar fi de exemplu un spider(un program ce viziteaza link-urile web, adunand informatii) sau un agent (un program ce are sarcina sa gaseasca informatii specifice, utilizand in cele mai multe cazuri motaorele de cautare), o aplicatie executabila standard, un dispozitiv wireless etc.
Serverul si browserul sunt de obicei pe calculatoare separate, dar aceasta nu este o cerinta. Poti folosi un browser care sa acceseze pagini de pe u nserver web care ruleaza pe acelasi calculator.
Atat serverul cat si clientul folosesc un protocol definit pentru a comunica intre ele. Un protocol este pur si simplu o metoda agreata pentru initierea sesiunirol de comunicare, trecand informatia inainte si inapoi, si apoi incheind sesiunea. Cateva protocoale sunt folosite pentru cumunicatiile web; cele mai intalnite sunt Hypertext Transfer Protocol (HTTP), Secure Hypertext Transfer Protocol(HTTPS), File Transfer Protocol(FTP) si Network News Transfer Protocol(NNTP). In afara protocolului folosit, cererile web se bazeaza pe protocolul de retea numit Transmission Control Protocol/Internet Protocol (TCP/IP), protocol standard de comunicare globala ce determina regulile de baza pe care cele doua calculatoare le urmaresc in schimbul de informatii.
Serverul asteapta pana cand ajunge o cerere pentru a initializa comunicatia. Intr-o aplicatie web clientul intotdeauna trimite initializarea pentru a incepe o sesiune – serverul poate doar raspunde. Initializarea sesiunii consta intr-o serie definita de biti. Continutul bitilor nu este important – singurul lucru important este ca ambele calculatoare sa recunoasca seria de biti ca si initailizare. Cand serverul primeste cererea de initializare, el anunta tranmisia prin trimiterea unei alte serii de biti catre client.
Cerere client
Cand se scrie o cerere intr-un browser sau se apasa un hyperlink, browserul impacheteaza cererea si trimite o portiune importanta a URL-ului, numita domain name, sau numita in mod curent server DNS. Serverul de nume pastreaza o baza de date cu numele, fiecare cu adresa IP asociata. Computerele nu inteleg foarte bine cuvintele, asadar serverul traduce adresa solicitata intr-un numar. Textul care apare de obicei intr-un link sau in bara de adrese este o versiune prietenoasa a unei adrese IP.
Fiecare adresa IP identifica in mod unic un singur calculator. Daca primul server de nume nu are adresa ceruta in baza de date, automat il trimite ma ideparte catre serverul aflat mai sus in ierarhie. Eventual, daca nici un server de nume nu poate traduce numele cerut in adresa IP, cererea ajunge la unul din serverele ce detine toate IP-urile publice inregistrate. Daca nici un server nu reuseste sa traduca adresa, raspunsul de eroare ajunge inapoi la browser, de la u nserver la altu in ierarhie inversa. In acest moment se va vedea mesajul de eroare.
Daca serverul de nume gaseste o intrare pentru adresa IP a cererii, va introduce cererea in cache, astfel incat sa nu mai ajunga la serverele aflate mai sus in ierarhie. Perioada pana ajunge in cache se numeste Time to live (TTL), astfel incat daca cererea depaseste TTL, atunci serverul va trimite ma ideparte cererea. Serverul de nume va intoarce la browser adresa IP, ce va fi folosita la contactarea serverului ce are atribuit IP-ul respectiv.
Asadar, procesul afisarii paginii web consta in mod obisnuit intr-o serie de conversatii scurte intre browser si server. In mod obisnuit, browser-ul primeste pagina principala, o analizeaza in vederea altor referinte, si apoi incepe afisarea paginii principale in timp ce cere fisierele referite. Asta e un motiv pentru care se vad mai intai locurile defaisrea ale imaginilor cat timp se incarca pagina. Pagina principala contine referinte catre alte fisiere care contin imagini, dar pagina principala nu continea ea insasi acele imagini.
Cum raspunde serverul web – pregatirea
Din punctul de vedere al serverul web, fiecare conversatie inseamna un contact nou nout. In mod implicit, serviciile unui server web merg pe principiul primul venit – primul servit. Serverelw web nu „isi amintesc” un anumit browser de la o cerere la alta.
Browserele si serverele moderne folosesc versiunea 1.1 a HTTP, ce implementeaza conexiunile keep-alive. Aceasta inseamna ca, odata realizata, conexiunea poate fi pastrata activa pe timpul mai multor cereri. In ciuda conexiunilor HTTP keep-alive, fiecare fisier trimis necesita o cerere separata si un ciclu de raspuns.
Parte din URL
Linia scrisa in campul de adresa al browserului pentru a accesa u nfisier este numita Uniform Resource Locator(URL). Serverul actioneaza o procedura standard pentru a servi fiecare cerere. In primul rand analizeaza cererea prin separarea URL-ului cerut in partile componente: slah-uri, coloane, puncte, semne de intrebare si ampersant – tot numiti delimitatori – fac mai usoara impartirea. Fiecare parte are o functie specifica. Un exemplu de URL: http://www.microsoft.com:80/CSharpASP/default.htm?Page =1&&Para=2
Explicatii:
http protocol. Spune serverului ce protocol ar trebui sa foloseasca pentru a raspunde la cerere.
www.microsoft.com Nume domeniu. Aceasta parte a URL-ului translateaza catre adresa IP. Domeniul insusie e format din mai multe parti: numele gazda:www; numele de domeniu, microsoft; si numele domeniului Internet,com.
80 Numar port. Un server web are mai multe porturi. Fiecare arata un loc unde serverul „va asculta” dupa comunicatii.
Csharp Director virtual. Serverul traduce acest nume intr-o cale fizica pe har drive. Un director virtual este un nume scurt, un pointer ce face referinta la un director fizic. Numele directoarelor fizice si virtuale ar trebui sa nu fie la fel.
Default.htm Numele fisierului. Serverul va intoarce continutul fisierului. Daca fisierul va fi recunoscut ca executabil de catre web server (cum ar fi ASP), serverul va executa codu lde program din fisier si va intoarce rezultatele. Daca fisierul nu este recunoscut, serverul ofera posibilitatea descarcari iacelui fisier.
?(semn intrebare) Separator. Semnul de intrebare separa fisierul cerut de anumiti parametrii trimisi odat acu cererea. In exemplu URL acesta contine 2 parametrii: Page=1 si Page=2.
Page. Nume parametru. Programele, cum ar fi paginile ASP, pot citi parametrii si sa se foloseasca pentru a furniza informatii.
= (semnul legal). Separator. Semnul egal separa numele parametrului de valoarea parametrului.
1 Valoare parametru. Parametrul numit Page are valoarea 1. De notat ca browserul trimite toate valorile parametrilor ca si sir de date. Un sir inseamna o serie de caractere.
& (Ampersand) Separator. Ampersandul separa parametrii.
Para=2 Parametru si valoare.
Serverul traduce calea
Cererile web nu contin calea reala sau fizica; in schimb, cererile se fac folosind pagini virtuale. Dupa analiza URL, serverul traduce calea virtuala in cale fizica. .
Serverul aloca resursele
Serverul verifica pagina ceruta. Daca nu exista, serverul intoarce un mesaj de eroare – de obicei HTTP 404 – File Not Found.
Serverul verifica nivelul de acces
Dupa localizarea resursei, serverul verifica daca contul care a realizat cererea are un nivel suficient de acces pentru acea resursa. In mod implicit, Internet Information Server (IIS) cere folosirea unui cont special numit IUSR_Machinename, unde Machinename este numele calculatorului server. In cele mai multe cazuri acest cont poarta numele de cont „anonim”, deoarece serverul nu cunoaste nici o informatie reala despre userul ce realizeaza cererea. Pentru paginile ASP.NET, IIS foloseste contul SYSTEM sau alt cont guest numit aspnet_wp_account in mod implicit.
Cum raspunde un server web
IIS diferentieaza diferitele tipuri de fisiere dupa extensie (de exemplu .asp, .htm, .exe etc) ca si Windows Explorer. Cand se realizeaza un dublu click pe un fisier sau o iconita in Windows Explorer, se verifica extensia fisierului in registry, o baza de date speciala ce retine informati idespre sistem si aplicatii. Registrul contine o intrare pentru fiecare tip de extensie inregsitrata. Fiecare extensie are asociata un tip de fisier. Fiecare tip de fisier are asociat un fisier executabil. Serverul extrage extensia din numele fisierului, cauta programul asociat si lanseaza in executie programul
Alte servere web folosesc extensiile de fisier pentru a determina cum sa proceseze o cerere de fisier, dar nu folosesc asociatiile din registrii. De exemplu tipul MIME.
Majoritatea serverelor web au ca metoda de rezolvare a cerintelor catre fisierele a caror extensie nu o cunosc, oferirea spre descarcare. Unele servere asigura deasemnea o actiune implicta daca se face cerere catre un URL care nu contine un fisier. In acest caz, majoritatea serverelor incearca sa reintoarca un fisier dintr-o lista de nume implicite – de obicei un fisier numit default.htm sau index.htm. Aceasta lista se poate configura, atat in mod global pentru toate directoarele virtuale, cat si pentru fiecare director virtual separat.
Serverul poate incepe transmisia raspunsului inapoi la client imediat ce se genereaza, sau il poate tine in memorie pana cand se formeaza tot raspunsul si apoi sa il trimita. Raspunsul are doua componente: capul raspunsului si corpul raspunsului. Prima parte contine informatii despre tipul raspunsului. Pe langa altele , prima parte poate contine:
• un cod de raspuns
• tipul MIME al raspunsului
• data si timpul dupa care raspunsul nu mai este valid
• un URL pentru redirectare
• orice valoare cookie pe care serverul va dori sa o retina la client
Cookie-urile reprezinta siruri text pe care browser-ul le salveaza in memorie sau pe hard drive-ul calculatorului client. Cooki-urile se pot pastra pe durata sesiunii browserului sau se pot pastra pana la o data de expirare specificata. Browserul trimite cooki-urile asociate cu un site inapoi la server cu fiecare cerere catre acel site.
Ce face clientul cu raspunsul
Clientul, de obicei un browser, trebuie sa cunoasca tipul continutului cu care raspunde serverul. Clientul citeste tipul MIME al header-ului pentru a determina tipul continutului. Pentru cele mai multe cereri, tipul MIME este ori text/html, ori un tip imagine, cum ar fi image/gif, dar poate fi totodata un fisier video sau audio, o animatie, sau orice alt tip. Browserele, ca si serverele, folosesc valoriile din registrii si tipul MIME pentru a determina modul de afisare al fisierului.
Cand corpul raspunsului este HTML, browserul analizeaza fisierul pentru a separa continutul. Apoi va folosi inceputul fisierulu ipentru a detrrmina modul de afisare a continutului pe ecran. Fisierele HTML moderne pot contine cateva tipuri diferite, cum ar fi text si imagine. Browserele se ocupa de fiecare in mod diferit.
Cascading Style Sheets. Acestea sunt fisiere text intr-un format specific ce contin directive despre cum este formatat continutul unui fisier hTML. Browserele moderne folosesc Cascading Style Sheet(CSS) pentru a desemna fonturi, culori, margini, vizibilitate, pozitionare si alte informatii despre formatare a elementelor de pe pagina. Stilurile CSS pot fi ocntinute intr-un tag, pot fi asezate intr-o zona separata dintr-o pagina HTML, sau poate exista intr-un fisier separat pe care browserul il acceseaza dupa ce analizeaza pagina principala, dar inainte de afisarea continutului pe ecran.
Script. Toate browserele moderne pot executa JavaScript, chiar daca nu il executa in acelasi mod. ActiveX Components or Java Applets. Aceste programe mici se executa la client mai mult decat la server. Componentele ActivX ruleaza numai in Internet Explorer sau pe paltforma Windows, pe cand appleturile Java ruleaza pe aproape toate browserele si toate platformele.
XML Extensible Markup Language (XML) este similar cu HTML – amandoua se bazeaza pe taguri si continut. Aceasta nu e o surpriza, deoarece amandoua deriva din Standard Generalized Markup Language (SGML).
Introducere in paginile web dinamice
Procesul client-server-client este important deoarece se intampla de fiecare data cand clientul contacteaza serverul pentru a prelua date. Aceasta se itnampla intr-un mod diferit fata de modelul client-server descris mai inainte. Deorece serverul si clientul nu cunosc nimic unul despre celalalt, pentru fiecare interactiune, trebuie trimis, initializat si restaurat valorile apropiate pentru a mentine continuitatea aplicatiei.
Ca un exemplu simplu,, se spunem ca avem un site securizat cu un formular de autentificare. Intr-o aplicatie standard, dupa ce userul se autentifia, aceasta ramane singura autentificare necesara. De fapt acest lucru inseamna ca utilizatorul s-a autentificat pe toata durata aplicatiei. In contrast, cand autentificarea se realizeaza pe un site securizat doar prin utilizator si parola, serverul trebuie sa realizeze reautentificarea pentru fiecare cerere efectuata.
Acesta este unul din motivele pentru care aplicatiile dinamice au devenit asa populare. Intr-un site ce permite conexiuni anonime, utilizatorii se pot autentifica numai prin compararea valorilor utilizator/parola cu cele reale stocate pe un server. In timp ce HTML este un limbaj adecvat pentru afisare si nu este un limbaj de programare, este nevoie de cod pentru autentificarea utilizatorilor.
Un alt motiv pentru care paginile dinamice au devenit asa populare este faptul schimbarii informatiei. Paginile statice sunt foarte bune pentru articole, lucrari pentru scoala, carti si imagini - in general, pentru informatii al caror continut nu se schimba decat foarte rar. Dar paginile statice nu sunt deloc adecvate pentru a nota informati idespre angajati, liste de contacte, informatii de tip calendar, stiri, meciuri sportive - in general, date cu care interactionezi zi de zi. Datele se schimba prea des pentru a folosi cu succes paginile statice.
Avantajele C# in aplicatiile web
C# este un instrument extrem de puternic pentru crearea de aplicatii pentru platforma Windows. Dar nu este,cu siguranta, singurul instrument pentru a realiza acest lucru. Sunt si alte limbaje de programare care pot face acest lucru, dar prin faptul ca asigura suport intern pentru anumite tipuri de aplicatii, ofera managementul memoriei si dezvoltare orientata obiect, C# reduce foarte mult efortul implicat in crearea de aplicatii.
Serviciile web
Un serviciu web nu este mai mult decat o interfata web ctre obiecte ce ruleaza pe server. Este similar cu vechiul DCOM. DCOM oferea posibilitatea lansarii aplicatiilor si folosirea aplicatiilor de la distanta si a DLL-urilor ca si cu mar fi rulat de pe masina locala. Realiza acest lucru prin crearea de proxiuri la ambele capete ale tranzactiei. DCOM impacheta apoi functia, subrutina, metoda sau proprietatea apelata de aplicatia local impreuna cu alti parametrii si o trimitea catre server prin retea. Serverul despacheta aceste valori, lansa obiectul sau aplicatia si realiza apelarea prin transmiterea parametrilor. Operatia inversa se intampla cand se reintorc valorile. DCOm foloseste un instrument de impachetat binar foarte eficient pentru a transmite datele prin retea.
Serviciile web realizeaza exact aceleasi sarcini ca si DCOM - te lasa sa folosesti obiecte aflate la distanta. Dar folosesc un alt fel de sistem, numit Simple Object Access Protocol(SOAP), pentru a impacheta apelarea si parametrii. SOAP este un fisier text. El foloseste XML pentru simplificarea sintaxei si identificarea diferitelor tipuri de valori de date necesare aplearii la distanta. Deoarece SOAP este un fisier text, poate trece peste protectia firewall. Oircum, SOAP nu este un necesar pentru realizarea de apelari la distanta; este pur si simpu un standard si astfel reprezinta un convenient in al folosi.
C# si Visual Studio au suport extins pentru SOAP. In fapt, folosirea SOAP in C# este transparent. Cadrul de lucru .NET are grija de toata tranlsatarea valorilor si problemelor de transport, lasand programatorul sa se ocupe doar de scrierea codului de aplicatie. Procesul crearii unui serviciu web este foarte similar cu procesul de creare a unui DLL COM.
Cea mai mare problema cu serviciul web si SOAP este performanta; nu este deloc simplu si eficient sa translatezi valorile din si intr-o reprezentare text asa cum este sa le translatezi dintr-u nformat binar ca cele folosite de DCOM si CORBA.