Istoria Si Evolutia Programarii Web

Embed Size (px)

Citation preview

Istoria si evolutia programarii Webde Horea Mihut, grupa 934

Daca vorbim despre programarea Web, atunci putem incepe discutia de la 6 august 1991 cand CERN, o organizatie europeana pentru cercetarea particulelor a publicat noul proiect World Wide Web. Webul a fost inventat de Tim Berners-Lee in 1989. Ce a fost inainte de Internet Desi aplicatiile si strategiile de baza care fac posibila existenta Internetului existau de 2 decenii, reteaua nu a capatat o fata publica pana in 1990. Doua decenii care au inceput cu proiectul american ARPA in 1958 acesta lega in retea mai multe radare de pe teritoriul statelor unite - cercetari pornite si urgentate de lansarea Sputnik. In 1965 Lawrence Roberts a inceput sa construiasca o retea conform studiului sau pentru United States Air Force in care recomanda folosirea "packet switching" in loc de "circuit switching" pentru a ajunge la o robustete si rezistenta la dezastre. Profesorul Leonard Kleinrock de la UCLA a realizat fundatiile teoretice a unei retele bazata pe transfer de pachete in 1962, iar mai tarziu in 1970 pentru rutare ierarhica, concepte care au stat la baza dezvoltarii Internetului din ziua de astazi. Dupa multa munca, pe 29 octombrie 1969 au fost conectate primele doua noduri ale ARPANET, ce legau UCLA de sistemul NLS din California. La sfarsitul anului 1971, deja erau legate 15 locatii din SUA la ARPANET. Vazand ca "packet switching" functioneaza in ARPANET, Oficiul Postal Britanic, Telenet, Datapac si Transpac au colaborat la crearea primului serviciu de retele international. In 1978 in UK acesta se numea International Packet Switched Service (IPSS). Deja totul lua amploare, astfel incat Vinton Cerf si Robert Kahn au creat prima descriere a protocolului TCP de astazi intr-o lucrare publicata in mai 1974. Termenul de "Internet" a fost folosit pentru a descrie o singura retea TCP/IP globala a aparut prima data intr-o publicatie scrisa de Yogen Dalal si Carl Sunshine de la Universitatea Stanford. Primul "programator web" a fost chiar inventatorul www-ului, Tim Berners Lee, care a publicat primul site din istorie n anul 1991. Pe 25 decembrie 1990, cu ajutorul lui Robert Cailliau la CERN (cel mnai mare nod de Internet din Europa), a implementat prima comunicare reusita intre un

client HTTP (Hypertext Transfer Protocol) si un server prin intermediul Internetului. Primul website http://info.cern.ch/hypertext/WWW/TheProject.html a fost adresa primului site Web si server Web din istorie, si centraliza informatii privind proiectul WWW. Vizitatorii puteau invata mai multe despre hypertext, detalii tehnice pentru crearea propriei lor pagini, si chiar explicatii despre cum puteau cauta informatii pe web. Exista o copie mai recenta a paginii (1992) pe siteul Consortiului World Wide Web. Asa ca, desi Web-ul a fost creat ca o unealta care sa ajute fizicienii sa raspunda unor intrebari grele despre Univers, astazi este o parte importanta din comunitatea globala si ne afecteaza viata din fiecare zi. Primul browser Vizitatorii paginii CERN din 1990 aveau sa vada asta cand accesau siteul. Arata mult mai primitiv decat primul browser/editor NeXT, si asa si era! Dar acesta era primul browser universal care garanta oricui de pe planeta acces la Web, indiferent de ce sistem informatic folosea.

Acest sistem tocmai iesea din teste in vara 1991. A fost conceput sa functioneze doar tiparind comenzi la tastatura. Nu exista mouse, grafica, doar text simplu, dar permitea oricui cu conexiune Internet sa acceseze informatiile de pe Web. Protocoale Infrastructura complexa a Internetului este formata din componentele hardware si un sistem de layere software care controleaza diverse aspecte

ale arhitecturii. In timp ce hardwareul poate fi folosit des pentru a sustine alte sisteme software, designul si procesul riguros de standardizare a softwareului arhitecturii caracterizeaza Internetul si constituie fundatia pentru succesul si scalabilitatea acestuia. Responsabilitatea pentru designul arhitectural a sistemelor software in internet a fost delegata IETF (Internet Engineering Task Force). Aceasta contine standarde de lucru, open source, cu privire la diferitele aspecte ale arhitecturii Internet. Rezultatele finale vor fi facute publice intr-o serie de publicatii, fiecare numita RFC - Request for COmments, diponibile gratuit pe siteul IETF. Principalele protocoale de retea ce permit Internet sunt cuprinse in RFC - Intenret Standards. Celelalte documente sunt mai putin riguroase si sunt simplu informative, experimentale, sau istorice, sau documenteaza cele mai bune practici curente cand vine vorba de implementat tehnologii Internet. Standardele Internet descriu un framework cunoscut ca Internet Protocol Suite. Acest este un model arhitectural care imparte metodele intr-un sistem de protocoale pe straturi (layere). Primul strat este Application Layer, spatiu destinat aplicatiilor web browser. Sub acest strat, este Transport Layer, stratul de transport care conecteaza diferite aplicatii sau hosturi intr-o retea. Sub acestea, exista doua straturi, care formeaza nucleul tehnologiei de comunicatie: Internet Layer, care permite calculatoarelor sa se gaseasca si identifice prin protocolul adresele IP si sa se conecteze unele la altele prin retele de tranzit (intermediare). In partea de jos a arhitecturii exista un ultim strat software Link Layer, care faciliteaza comunicarea si conectarea intre hosturi ale aceleasi retele, cum ar fi un LAN sau o conexiune dial-up. Modelul, cunoscut ca si TCP/IP este creat ca sa fie independent de hardwareul pe care este implementat, asa ca modelul unui router de exemplu nu conteaza. Structura Structura Internetului alaturi de caracteristicile sale au fost studiate in mod progresiv, de cand acesta a fost inventat. A fost determinat faptul ca rutarea IP si legaturile hypertext din World Wide Web sunt exemple de retele scale-free. Internetul este extrem de eterogen, astfel ca multi oameni de stiinta au descris Internetul ca un prim exemplu de sistem extrem de complex care creste organic extrem de rapid.

Inainte sa putem discuta despre limbaje de programare web, sa stabilim metodele prin care se face accesul la Internet si cum putem ajunge sa folosim aceste limbaje: Accesul la World Wide Web Inca de la inceput limba prevalenta in Internet a fost engleza. Asta poate fi rezultatul originii Internetului, sau a rolului de lingua franca pe care il joaca engleza. Metodele comune de acces la Internet includ dial-up, broadband (prin cablu coaxial, fibra optica, copper wires), wi-fi, satelit, si tehnologiile 3G/4G inglobate in terminalele mobile (telefoane). Exista de asemenea Internet Access Points in majoritatea locurilor publice cum ar fi terminalele din aeroporturi, gari, cafenele, restaurante. Programare WEB Asa cum exista o diversitate uriasa de limbaje de programare disponibile pentru taskurile conventionale de programare, exista o diversitate de limbaje de programare pentru Web. Nu avem motive sa credem ca un singur limbaj va monopoliza scena programarii Web, desi varietatea si posibilitatile din acest moment ne poate face sa credem asta. Java este valabil si pentru programarea normala si pentru programarea Web, dar nu toti dezvolatorii de aplicatii prefera Java in fata altor limbaje. Esential este ca

avem nevoie de o varietate de limbaje de programare pentru Web, la fel cum avem nevoie pentru programarea in orice alt domeniu. Dar Webul, totusi, pune in joc unele constrangeri in ceea ce priveste alegerile/preferintele noastre asupra unui limbaj de programare Web sau altul: posibilitatea de a te ocupa de o varietate de protocoale, formate si taskuri de programare, performanta (viteza si marime), siguranta datelor (implicit a persoanelor reale), independenta data de diferite platforme, protectia proprietatii intelectuale (copyright), si abilitatea de a te ocupa de alte tooluri si limbaje Web. Aceste probleme nu sunt independente unele de altele. O alegere poate fi potrivita pentru una din categorii, in schimb sa fie cea mai proasta alegere in cazul alteia. HTML (HyperText Markup Language) Este limbajul de baza inteles de toti utilizatorii WWW (World Wide Web). Un cod HTML nemodificat poate fi executat pe un PC cu sistem de operare Windows, pe un Mac, sau pe un workstation Unix. HTML este indeajuns de simplu incat oricine sa poate scrie un document HTML, si se pare ca lumea profita din plin de asta: toti o fac deja. HTML este un limbaj markup mai degraba decat un limbaj complet de programare. Un document HTML (program) este format din text ASCII impreuna cu instructiuni (markups) care afecteaza felul in care textul este afisat (formatarea textului). Modelul de baza pentru executia unui document HTML este preluarea unui document dupa nume (exemplu URL), interpretarea HTMLului si afisarea documentului, si probabil preluarea inca catorva documente HTML implicate in proces. Aplicatiile HTML, sau ce am putea considera similar cu o aplicatie, sunt constituite din o colectie de pagini web cu legaturi intre ele, ce sunt gestionate de un singur server HTTP (HTTP este protocolul TCP/IP care defineste interactiunea dintre clientii WWW si servere). Aceasta este viziunea de ansamblu, dar totusi limbajul este extrem de simplu, modelul la fel, iar asta este unul din atuurile limbajului HTML. Puterea de calcul a limbajului HTML este limitata. Acest lucru este intentionat in design, deoarece previne executia programelor periculoase pe calculatoarele clientilor. Cu toate astea, programatorii Web se simt tot mai constransi de aceste limitari in timp ce aplicatiile si cerintele pentru aplicatii sunt tot mai mari si mai complexe. Cerintele ce nu pot fi codate in HTML trebuie sa fie executate pe server in alt limbaj de programare, sau sa fie executate pe masina locala downlodat de pe un server. Din cauza functionalitatii limitate a HTML, unele tipuri specifice de aplicatii se prezinta foarte slab, mai ales in contextul in care multi clienti se conecteaza la Internet prin o retea dial-up de viteza mica (sub 28.8 kbps). Problemele legate de performanta se ridica din doua surse: o aplicatie care

este foarte interactiva are nevoie de comunicare constanta cu serverul pe aceste linii de viteza mica, lucru care scade dramatic performantele vizibile ale unei aplicatii; cererea ca toate calculele sa fie rulate pe server mareste timpul de incarcare pe server si deci va reduce performanta vizibila de clienti. In ziua de azi majoritatea clientilor au calculatoare competente, astfel incat sunt capabile sa accepte o mare parte din nevoile de calcul pe care le permite limbajul HTML. De exemplu, un joc interactiv bazat pe Internet poate fi o experienta frustranta pentru utilizatorii cu viteze de conexiune mici, si pot supraincarca serverul pe care acestea se afla. Daca tu ai fi creatorul unui astfel de joc, ai fi inclinat spre functionalitatea jocului spre client, dar, din moment ce capacitatile HTML sunt limitate, trebuie gasita alta cale de a suporta calculele pe calculatoarele clientului. Programatorul poate face un program client executabil pentru clienti, care sa fie executat prin intermediul browserului HTML, dar utilizatorii vor putea accepta asa ceva doar in cazul in care au incredere in sursa (cum ar fi yahoo, google, facebook), si aceste programe sunt o sursa clara in ceea ce priveste securitatea sistemelor utilizatorilor. Atunci cand un cod este executat pe calculatorul unui client, trebuie luate in considerate doua lucruri: ce este trimis si ce este executat. Exista trei alternative pentur fiecare din acestea: cod sursa, un format intermediar compilat partial, si cod binar. Deoarece compilarile pot avea loc pe masina clientului, ce este trimis (shipped) nu este neaparat ce este executat. Codul Byte, in functie de masuratorile prezentate in cadrul conferintei JavaOne, poate fi de 2-3 ori mai mici decat codurile binare comparabile, asa ca transferul acestora poate fi considerabil mai rapid, mai ales peste liniile de viteza mica. Deoarece timpul de transfer este semnificativ in Web, acesta este un avantaj major. Codul sursa, este de asemenea, compact. Executiile de performanta favorizeaza in mod clar codul binar in detrimentul codului byte, iar codul byte in detrimentul codului sursa. In general, codul binar se executa de 1-10 ori mai repede decat codul octet. Majoritatea dezvoltatorilor Java VM sunt in curs de dezvoltare de compilatoare JST (Just In Time) pentru a obtine beneficii de dimensiune si viteza a bytecodurilor binare. Liniile de cod byte Java sunt downlodate de pe Internet si compilate in binar nativ pe platformele locale ale utilizatorilor. Codul binar este mai apoi executat, si eventual salvat in memoria cache, pentru executii ulterioare. Ar trebuie sa fie clar ca orice combinatie a acestor strategii ar putea fi folosita in punerea in aplicare a oricarui limbaj special de programare Web, si exista de fapt, variatii mari intre sistemele de fapt chestionate. Independenta platformei In timp ce independenta platformei a fost mult timp un obiectiv intre

dezvoltatorii de limbaje, nevoie de a stoarce fiecare gram de performanta de la software a facut acest lucru imposibil de mentinut de multe ori, cel putin la nivel de cod executabil. Cu toate acestea, in Web aceasta preocupare devine mai putin importanta, deoarece timpul de transfer este acum o componenta semnificativa de performanta si poate domina timpul de executie. Independenta de platforma poate fi obtinuta prin transportul fie a byte code sau a cod sursa. Un avantaj al livrarii de byte code in detrimentul codului sursa este faptul ca o multitudine de limbaje sursa ar necesita ca calculatoarele utilizatorilor sa poata sa mentina mai multe compilatoare sau interpretoare pentru limbajele sursa, in timp ce coduri mai mici vor necesita mai putine masini virtuale.

Proprietate intelectuala (copyright)Conservarea proprietatii intelectuale. Desi nu este discutata in prezent ca o problema, abilitatea de a descarca appleturi in conditii de siguranta este un avantaj suplimentar pentru dezvoltatorii care doresc sa-si protejeze proprietatea intelectuala. Uitandu-va la scriptul altcuiva sau la codul sursa pentru a vedea cum face ceva, si apoi a modifica putin, nu se simte ca a fura ceva. Pentru marea majoritate a oamenilor onesti de pe Web, acest minor exemplu este destul. Dar pentru restul, efortul implicat in ingineria inversa poate servi ca un efect disuasiv eficient. Siguranta Virusii au dovedit ca executia de cod binar dintr-o sursa ce nu este de incredere, sau chiar moderata ca fiind de incredere, este periculor. Codul care este downlodat sau uplodat de pe diverste siteuri de pe Web nu ar trebui sa i se permita sa dauneze masinii pe care ruleaza. Downlodarea de cod binar compilat din limbajele conventionale de programare este clar nesigur, dat fiind puterea acestor limbaje. Chiar daca aceste limbaje sunt sau ar fi constranse la un nivel de siguranta, nu exista nici o modalitate de a verifica faptul ca acesta se va desfasura fara a dauna calculatorului utilizatorilor. HTML a dovedit ca descarcarea de cod sursa intr-un limbaj in conditii de siguranta si executandu-l cu un interpretor de incredere/cunoscut se face in conditii de siguranta. Un client nu poate fi infectat cu un virus doar prin solicitarea si afisarea unui document HTML (desi cu siguranta se poate aduce un document infectat cu un virus, care sa poata fi activat la deschiderea/executarea fisierului). Desi HTML are putere limitata, ideea generala din spatele HTML - un limbaj oarecum limitat interpretat de un client, a fost adoptat pe scara larga cu mai multe limbaje si interpretoare. Unele limbaje ating siguranta relativa prin executarea de programe compilate byte-code intr-un mediu de lucru relativ sigur (o masina virtuala).

Cu toate acestea, alte limbaje sunt interpretate la client de un interpretor furnizat de dezvoltatorul limbajului (flash standalone player, adobe flash player). In oricare din cazuri siguranta relativa poate fi atinsa datorita masinii virtuale care pot face static verificare dar imposibile de facut in momentul compilarii/rularii. Construirea unei masini virtuale sigure este o sarcina non triviala. Nu este nevoie de multe masini virtuale, deoarece o masina virtuala poate fi gazda mai multor limbaje de programare. HTML se dovedeste a fi insuficient pentru a dezvolta aplicatiile Web visate singur. Fiind extinsa de servere si de programele downlodate de clienti, acest task este acum mai tangibil. Abilitatea de a dezvolta cu usurinta aplicatii sofisticate bazate pe Web, aplicatii segmentate optimal intre client si server in contextul unui environment eterogen si dinamic de pe Web, in timp ce nu compromite siguranta, performantele, sau proprietatea intelectuala acesta este scopul eforturilor actuale. Primul rezultat semnificativ al acestor eforturi este Java, un limbaj derivat din C++ cu capacitati specializate pentru dezvoltarea de aplicatii bazate pe Web. Java este compilat de catre dezvoltator la un format cod byte, cu coduri byte downlodate prin browser pe calculatoarele clientilor, si interpretat de o masina virtuala, care poate garanta utlizatorilor siguranta. Sun lucreaza la imbunatatirea sigurantei, performantei, exhaustivitatii si omniprezentei Java, iar industria se pare ca accepta aceasta abordare. Altii, mai ales dezvoltatorii de limbaje de programare si utilizatorii iau masuri similare pentru dezvoltarea de aplicatii bazate pe Web in limbajele lor, sprijinind in continuare siguranta rularii de cod pe masinile client. In ziua de azi siguranta ramane cea mai mare problema. Siguranta unui program este o functie a nivelului de siguranta pe care un mediu il ofera atunci cand un program este executat. La un anumit nivel, utilizatorul trebuie sa achizitioneze un program nesigur dintr-o sursa de incredere. In momentul de fata, acceptam Google, Yahoo, Facebook ca fiind surse sigure de la care avem incredere sa rulam/instalam/downlodam un program pe calculatoarele personale oricand. Pentru ca trebuie sa exista un mediu de incredere in care programele sa poata fi executate, iar utilizatorii sunt de asa natura ca vor accepta doar un numar limitat de companii/siteuri de incredere, au existat speculatii ca diversitatea, inclusiv a diversitatii in limbajul de programare ales, ar fi redusa. In timp ce acest lucru ar putea deveni general valabil, acum pare putin probabil, deoarece dezvoltatorii de limbaje se lauda ca pot schimba destinatia unui cod pentru a fi rulat pe un total alt mediu de lucru, dezvoltat de altcineva. In prezent, cele mai mari eforturi sunt orientate spre Java Virtual Machine, in principal deoarece este distribuit impreuna cu Netscape si licentiat de catre furnizorii de alte browsere Web.

Limbaje de programare Web si interfeteLimbajele si interfetele prezentate mai jos reprezinta mai multe tentative de a crea limbajul de programare "ideal", de obicei prin extinderea sau restrangerea unur limbaje existente. Limbajele de programare Web au o mare varietate de stramosi: limbajele de scripting, limbajele shell, limbajele mark-up si limbaje conventionale de programare. Limbajele de programare Web rezultate arata ascendenta din acestea in sintaxa lor, modelul de date si de calcul, stilul de punere in aplicare (sub rezerva constrangerilor impuse de proiectare discutate in sectiunea anterioara) si, ca rezultat, exista un numar destul de abordari distincte ale acestora. Cu toate acestea, este bine de constatat ca principalele categorii de limbaje originale se estompeaza in timp ce dezvoltarea progreseaza. Limbajele expuse mai jos sunt in ordine alfabetica. Daca intentionati sa cititi despre toate, va recomand sa incepeti cu Java, Perl, Tcl, Python, deoarece multe din celelalte limbaje sunt comparate cu ele. Inclusa in descriere este si un exemplu de programare in fiecare limbaj: banala afisare pe ecran a sintaxei "hello world". Ada95 Ada95 este cea mai recenta versiune a limbajului de programare Ada, care suporta acum si programare orientata pe obiecte. Ada este utilizat pe scara larga in guvern si industrie. Ada si WWW/Java compara Ada95 cu C++ si Java, si discuta capacitatea sa de programare pentru Internet. with Ada.Text_IO; use Ada.Text_IO; procedure Hello is begin Put_Line("Hello, world!"); end Hello; Apple Script Apple Script este limbajul de programare orientata pe obiect al Apple, asemanator cu limba engleza, limbaj de scripting si mediu de dezvoltare, realizat pentru Macintosh. Acesta este livrat cu MacOS, si este folosit pe scara larga pentru toate varietatile de cerinte de pe Mac. Recent, acesta a fost aplicata la cerintele programarii Web. WebRunner permite executarea de scripturi AppleScript incorporate in fisiere HTML, pentru a putea fi executate pe un client care ruleaza Netscape. Serverele cele mai utilizate pe scara larga HTTP pentru Macintosh, MacHTTP, un produs shareware, si WebStar, fratele sau comercial, ambele folosind AppleScript pentru inregistrare si scripting CGI.

= tell application "Finder" "Hello World" end tell A (Awe) BEF BEF este un limbaj orientat obiect, asemanator cu Pascal, limbaj de scripting utilizat pentru a descrie ocmportamentul in VRML. CCI (Common Client Interface) NCSA Mosaic CCI (Common Client Interface) este specificare de interfata (protocol si API) care permite aplicatiilor client sa comunice cu NCSA Mosaic, browserul web original, si sa controleze Mosaic sau sa obtina informatii de pe Web prin intermediul Mosaic. Acesta nu este pentru invocarea de aplicatii client-side de la Mozaic, ci pentru a controla Mosaic din aplicatie. Odata ce cererea ruleaza, poate comunica cu browserul prin CCI. CCI nu este singura interfata definita in acest scop, caci se pare ca Tcl si Pers o suporta acum de asemenea. CGI (Common Gateway Interface) Un daemon Web executa un program CGI pe server si intoarce rezultatele la client (un query asupra unui server cu baze de date), in loc sa returneze simplu o copie a fisierului mentionat, asa cum se intampla cu o referinta HTML (pagina Web de exemplu). Parametrii sunt transmisi de la server la programul CGI ca variabile de mediu. Programul este uneori scrin in C, C++, sau un alt limbaj de programare compilat, dar de obicei este scris in limbaj de scripting (ex Perl, Tcl, sh). Pentru a preveni deteriorarea serverului, in general, programele CGI sunt stocate intr-un director protejat sub control exclusiv a webmasterului. #!/usr/local/bin/perl # hello.pl -- my first perl script! print "Content-type: text/html\n\n"; print