Transcript Slide 1
2013 - 2014
Programarea Clientului Web
s.l. dr. ing. Simona Caraiman
mailto: [email protected]
Universitatea Tehnica “Gheorghe Asachi” din Iasi
Facultatea de Automatica si Calculatoare
Prezentari curs
HTTP 1.1 vs. HTTP 2.0 vs. SPDY (S?)
Biblioteci Javascript (JQuery/UI, YahooUI,
Prototype/script.aculo.us, Dojo) (S5)
HTML 5 (S6/7)
Browser plug-ins (S8)
Web mobile (protocoale comunicatii, principii dezvoltare, aplicatii
cross-platform) (S10)
Web semantic (S11)
Web 3D (WebGL) (S6/S10)
Cloud Computing (S?)
Testarea aplicatiilor Web
Web Security (S12)
propune o tema…
PCW - C3.Recapitulare
Client Web
Program ce permite accesarea
resurselor in World Wide Web
Deci,
identifica resursele prin URI-uri
acceseaza resurse printr-un protocol web
(“vorbeste” HTTP)
prezinta documentele web utilizatorului
(“cunoaste” limbaje de marcare)
PCW - C3.Recapitulare
Browser Web – arhitectura de referinta
PCW - C3.Recapitulare
Client Web
Program ce permite accesarea
resurselor in World Wide Web
Deci,
identifica resursele prin URI-uri
acceseaza resurse printr-un protocol web
(“vorbeste” HTTP)
prezinta documentele web utilizatorului
(“cunoaste” limbaje de marcare)
PCW - C3.Recapitulare
Adresarea resurselor Web
URI – Uniform Resource Identifier
(RFC 3986)
secventa compacta de caractere ce identifica o
resursa abstracta sau fizica
Ex.:
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://eureka.cs.tuiasi.ro/~sarustei/PCW/
mailto:[email protected]
tel:+1-816-555-1212
telnet://192.0.2.16:80/
PCW - C3.Recapitulare
URI, URL si URN
URI – locator, nume, amandoua
URL – Uniform Resource Locator
-
localizeaza resursa prin descrierea mecanismului de acces
http://users.cs.tuiasi.ro/~sarustei/PCW/
ftp://ftp.is.co.za/rfc/rfc1808.txt
URN – Uniform Resource Name
-
-
identifica resursele prin nume, intr-o forma persistenta, chiar daca
resursa a disparut (“urn:”<NID>”:”<NSS>)
-
NID – Namespace ID, NSS – Namespace Specific String
registered NID: ietf, pin, issn, oid, newsml, oasis, xmlorg, publicid
urn:isbn:0451450523
urn:issn:0167-6423
urn:ietf:rfc:2648
URL vs URN <=> “unde” vs “ce”
PCW - C3.Recapitulare
URN – Uniform Resource Name
nume simbolice asignate resurselor de catre organizatii cu
rol de autoritate (IANA)
nu contin informatii despre locatia/locatiile fizice ale
resursei
pot mapa url-uri multiple
decizia de a utiliza un anume url poate fi amanata pana in momentul
accesului efectiv la resursa
daca un url nu este disponibil, poate fi utilizat un altul fara necesitatea
interventiei utilizatorului
pot fi obtinute informatii despre resursa fara a fi necesara accesarea
efectiva a acesteia
Rezolvarea urn-urilor
NU este standardizata
poate fi implementata folosind HTTP, DNS
Implementari la nivel corporativ
Dependente de necesitatile organizatiei/corporatiei respective
PCW - C3.Recapitulare
URL – Uniform Resource Locator
Absolut
absolute-URL = scheme ":" hier-part [ "?" query ][“#” fragment]
http://example.org/absolute/URI/with/absolute/path/to/resou
rce.txt
ftp://example.org/resource.txt
Relativ
../../../resource.txt
./resource.txt#frag01
#frag01
Transformare URL relativ in URL absolut: RFC 3986
PCW - C3.Recapitulare
URL – Uniform Resource Locator
Sintaxa generica
- secventa ierarhica de componente:
scheme, authority, path, query,
fragment.
URL = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
PCW - C3.Recapitulare
URL - Sintaxa
Schema
-
Consta dintr-o secventa de caractere care incepe cu o litera
urmata de orice combinatie de litere, cifre, plus ("+"), punct
("."), sau minus ("-").
case-insensitive
oficiale (IANA – Internet Assigned Number Authority):
-
file, ftp, http, https, ldap, mailto, telnet, etc.
neoficiale:
-
fish, skype, callto, view-source, ymsgr, etc.
Ex:
ymsgr:sendIM?<screenname>
view-source:http://en.wikipedia.org/wiki/URI_scheme
http://eureka.cs.tuiasi.ro/~sarustei/PCW/
PCW - C3.Recapitulare
URL - Sintaxa
Authority
authority = [ userinfo "@" ] host [ ":" port ]
-
precedata de //
-
se termina la primul caracter “/”,”?” sau “#”
intalnit, sau la sfarsitul URL-ului
foo://example.com:8042/over/there?name=ferret#nose
PCW - C3.Recapitulare
URL - Sintaxa
Path
- contine date (organizate ierarhic), care, impreuna cu
componenta query, servesc la identificarea resursei in
contextul schemei si a autoritatii specificate
-
se termina la primul caracter “?”sau “#” sau la
sfarsitul URL
-
daca un URL contine componenta autoritate, atunci
componenta path trebuie sa fie precedata de “/”
foo://example.com:8042/over/there?name=ferret#nose
PCW - C3.Recapitulare
URL - Sintaxa
Query
- Contine date non-ierarhice, care impreuna
cu componenta path, servesc la
identificarea resursei in contextul schemei
si autoritatii specificate
- este indicata prin intermediul “?” si se
termina la primul caracter “#” sau la
sfarsitul URL-ului
foo://example.com:8042/over/there?name=ferret#nose
PCW - C3.Recapitulare
URL - Sintaxa
Fragment
- permite identificarea indirecta a unei resurse secundare
prin referinta la o resursa primara si informatii aditionale
de identificare
-
componenta fragment este indicata de prezenta
caracterului “#” si se termina la sfarsitul URL
-
evaluat client-side
-
cererea trimisa de client serverului nu contine identificatorul de
fragment
foo://example.com:8042/over/there?name=ferret#nose
PCW - C3.Recapitulare
URI
utilizeaza caractere dintr-un subset al setului ASCII:
ALPHA
DIGIT
-
.
_
~
caractere rezervate
pt. delimitarea componentelor generice ale unui URI:
:
/ ? # [ ] @
pt. delimitarea sub-componentelor:
! $ & ‘ ( ) * + , ; =
pot fi codificate folosind %HH-escaping
& - %26
OBS: codarea caracterului spatiu
%20 vs + (in query strings)
PCW - C3.Recapitulare
IRI
IRI = Internationalized Resource Identifier
(RFC 3987)
- complementar URI-ului
- secventa de caractere din Universal Character
Set (Unicode/ ISO 10646)
IRI (utf8/%HH)
URI (us-ascii/%HH)
March
March
March
März
März
M%C3%A4rz
http://wine.org/rosé
http://wine.org/rosé
http://wine.org/ros%E9
PCW - C3.Recapitulare
Client Web
program ce permite accesarea
resurselor in World Wide Web
Deci,
identifica resursele prin URI-uri
acceseaza resurse printr-un protocol web
(“vorbeste” HTTP)
prezinta documentele web utilizatorului
(cunoaste limbaje de marcare)
PCW - C3.Recapitulare
HTTP
HyperText Transfer Protocol
protocol client/server orientat pe tranzactii
client = web browser, web crawler, robot ..
server = web server
bazat pe TCP
HTTP /0.9/1.0/1.1 – RFC 2616
port standard de acces 80
protocol flexibil in legatura cu formatele
manipulate
PCW - C3.Recapitulare
HTTP - scenarii
End-to-end
Sisteme intermediare
proxy
gateway
tunnel
PCW - C3.Recapitulare
HTTP - scenarii
End-to-end
1. clientul initiaza conexiunea TCP end-to-end
cu serverul
2. clientul transmite cererea
3. serverul incearca sa execute operatia ceruta
4. serverul returneaza raspunsul
5. se inchide conexiunea TCP
PCW - C3.Recapitulare
HTTP - scenarii
Cererea
End-to-end
o comanda specifica (metoda HTTP)
un URL
mesaj de tip MIME (Multipurpose Internet Mail
Extension) – contine parametrii cererii
informatii despre client
informatii aditionale
Raspunsul
informatii despre status (cod succes/eroare)
mesaj de tip MIME – contine informatii despre
server, despre raspuns, continut (body content)
PCW - C3.Recapitulare
HTTP - scenarii
Sisteme intermediare
3 forme definite in specificatiile HTTP:
1. proxy
2. gateway
3. tunnel
PCW - C3.Recapitulare
HTTP - scenarii
Sisteme intermediare - proxy
Agent de forwarding:
-
primeste cererea pt. un obiect URL, modifica cererea, inainteaza cererea catre
server
Utilizare:
1. Intermediar de securitate (firewall)
- clientul si serverul separati de firewall
- serverul trebuie sa se autentifice firewall-ului pentru a crea o conexiune cu proxy
2. Versiuni diferite de HTTP
- proxy implementeaza ambele versiuni
PCW - C3.Recapitulare
HTTP - scenarii
Sisteme intermediare - Gateway
-
server ce apare clientului ca fiind serverul original
actioneaza in numele altor servere ce nu pot comunica
direct cu un client
Utilizare:
1. Intermediar de securitate (firewall)
2. Servere non-HTTP (ex. FTP, Gopher)
PCW - C3.Recapitulare
HTTP - scenarii
Sisteme intermediare - Tunnel
-
nu face nicio operatie asupra cererii/raspunsului HTTP
relay
Utilizare
- cand trebuie sa existe un intermediar intre client si server,
dar nu este necesar ca acesta sa inteleaga continutul
mesajelor
PCW - C3.Recapitulare
HTTP - scenarii
Cache
-
poate stoca cereri/raspunsuri
daca exista stocata o cerere identica cu una noua,
aceasta din urma este rezolvata cu raspunsul
stocat
poate opera pe client, server sau sistem
intermediar (nu tunel!)
limita de timp pentru stocare
PCW - C3.Recapitulare
HTTP - conexiuni
conexiuni multiple,
cereri secventiale
conexiune persistenta,
cereri secventiale
conexiune persistenta,
cereri ‘pipelined’
Mesaje HTTP
Mesaj HTTP = Simple-Request | Simple-Response |
Full-Request | Full-Response
HTTP/0.9 - Simple Req/Resp – GET+URI / continut URI
nu permitea negocierea continutului
HTTP/1.0 – Full Req/Resp
Full Request
Full Response
PCW - C3.Recapitulare
Mesaje HTTP
– Full Request/Response
Request
Response
Request Line
Response Line
identifica tipul mesajului si
resursa ceruta
informatii despre statusul
acestui raspuns
General Header
campuri aplicabile atat cererii cat si raspunsului, dar nu
si entitatii transferate
Request Header
informatii despre cerere si
despre client
Response Header
informatii despre raspuns
Entity Header
informatii despre resursa identificata de cerere si despre
entity body
Entity Body
corpul mesajului
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Request Line
Request-Line =
Method <SP> Request-URI <SP> HTTP-Version<CR><LF>
-
Method – metoda HTTP
Request-URI – URI-ul resursei cerute
HTTP-Version – versiunea HTTP utilizata de sender
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Request Line
Metode HTTP:
GET – cerere de acces la reprezentarea unei resurse
HEAD – similara cu GET, dar in mod uzual se doresc doar
meta-informatii (ex. tipul)
POST – utilizata pentru trimiterea unor entitati (date,
actiuni) spre server (ex. datele dintr-un formular)
PUT – plaseaza reprezentarea unei resurse pe server
OPTIONS – furnizeaza optiunile dialogului intre client si
server (ex. negocierea reprezentarii)
DELETE – sterge o resursa (reprezentarea ei) de pe
server
TRACE – echo la cerere (debugging)
CONNECT – conectare printr-un proxy
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Metode HTTP:
Safe: nu modifica resursa
Idempotente: efectele a N>0 cereri sunt aceleasi ca in
cazul unei singure cereri
Metode HTTP
Safe
Idempotente
OPTIONS
✔
✔
GET
✔
✔
HEAD
✔
✔
POST
PUT
✔
DELETE
✔
TRACE
✔
CONNECT
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Metode HTTP: PUT vs POST
POST
se cere ca serverul sa accepte entitatea inclusa in cerere ca o noua
subordonata a resursei identificate prin Request-URI
maniera uniforma de a oferi urmatoarele functionalitati:
adnotarea resurselor existente;
postarea unui mesaj intr-un newsgroup, mailing list, bulletin board;
furnizarea unui bloc de date unui proces de manipulare a datelor
(ex. rezultatul trimiterii unui formular);
extinderea unei baze de date printr-o operatie de tip append.
PUT
se cere ca entitatea inclusa in cerere sa fie stocata la adresa data de
Request-URI
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Metode HTTP: PUT vs POST
ambele sunt unsafe
ambele pot actualiza o resursa
ambele pot crea noi resurse
diferenta fundamentala: semnificatia Request-URI
functia efectiva a metodei POST
determinata de server
depinde de Request-URI
in urma POST poate sa nu rezulte o resursa identificabila
printr-un URI
PUT este idempotenta!
Ex.: trimiterea unei cereri pt. actualizarea unei resurse
rezultatul fiind timeout
cu POST nu este safe sa se incerce din nou actualizarea fara a
efectua o verificare
PCW - C3.Recapitulare
Mesaje HTTP - Raspuns
Status Line
Status-Line =
HTTP-Version <SP> Status-Code <SP>
Reason-Phrase <CR><LF>
-
HTTP-Version – versiunea HTTP utilizata de
sender
Status-Code – numar din 3 cifre ce indica
raspunsul la o cerere primita
Reason-Phrase – scurta explicare a status-code
PCW - C3.Recapitulare
Mesaje HTTP - Raspuns
Status Codes
Coduri de informare (1xx)
100 continue, 101 Switching Protocols
Coduri de succes (2xx)
200 Ok, 201 Created, 202 Accepted
Coduri de redirectare (3xx)
300 Multiple Choices, 302 Moved Temporarily
Coduri de eroare client (4xx)
400 Bad Request, 403 Forbidden, 404 Not Found
Coduri de eroare server (5xx)
501 Not Implemented, 503 Service unavailable
Coduri de avertisment (0..99)
PCW - C3.Recapitulare
Mesaje HTTP – General Header
Connection – contine o lista de cuvinte cheie si nume de campuri
header ce se aplica doar conexiunii TCP curente intre sender si cel
mai apropiat recipient non-tunel
Date – data si momentul la care a fost initiat mesajul
Forwarded – utilizat de gateways si proxy-uri pentru a indica
pasii intermediari de-alungul unui lant cerere-raspuns. Fiecare
gateway sau proxy ce manipuleaza mesajul poate atasa un camp
Forwarded ce indica URI-ul propriu
PCW - C3.Recapitulare
Mesaje HTTP – General Header
Keep-alive – poate fi prezent daca in campul Connection apare
cuvantul cheie Keep-Alive. Poate indica timpul maxim in care
sender-ul va mentine conexiunea in asteptarea urmatoarei cereri
sau nr. maxim de cereri aditionale ce vor fi permise in cadrul
acestei conexiuni persistente
MIME-Version – indica versiunea MIME respectata de mesaj
Pragma – contine directive specifice implementarii, ce ar putea fi
aplicate unui recipient de-a lungul lantului cerere-raspuns
Upgrade – utilizat intr-o cerere pt a specifica protocoale aditionale
suportate de client; intr-un raspuns este utilizat pentru a indica ce
protocol va fi folosit
PCW - C3.Recapitulare
Mesaje HTTP
–
Caching
Scop:
eliminarea necesitatii trimiterii unor cereri
reduce nr. de round-trips
se foloseste un mecansim de expirare
eliminarea necesitatii trimiterii unor
raspunsuri complete
reduce bandwidth-ul necesar
se foloseste un mecanism de validare
PCW - C3.Recapitulare
HTTP caching – principii de baza
1.
2.
3.
Daca header-ul raspunsului o interzice, acesta nu va fi stocat in
cache
Daca resursa este autentificata sau securizata (i.e. HTTPS), nu va
fi stocata in cache
O reprezentare stocata in cache este considerata fresh (poate fi
trimisa la client fara a face verificari la server) daca:
4.
Daca reprezentarea este veche, se cere validarea ei de catre
server
5.
are setat un timp de expirare sau un header de control al vechimii
si se afla inca in perioada fresh
Daca este validata, reprezentarea din cache este trimisa clientului
Daca nu este validata, se cere o noua reprezentare de la server
In anumite conditii (ex. lipsa conexiune) un cache poate servi o
reprezentare veche fara a o valida
PCW - C3.Recapitulare
HTTP caching
HEAD /~sarustei/index.html HTTP/1.1
host: users.cs.tuiasi.ro
HTTP/1.1 200 OK
Date: Tue, 15 Oct 2013 19:57:56 GMT
Server: Apache/2.2.3 (CentOS)
Cache-Control: max-age=3600, must-revalidate
Expires: Fri, 25 Oct 2013 18:39:57 GMT
Last-Modified: Tue, 26 Mar 2013 18:39:57 GMT
ETag: "157aae6-282-4d8d83f841940"
Accept-Ranges: bytes
Content-Length: 642
Content-Type: text/html; charset=UTF-8
PCW - C3.Recapitulare
Mesaje HTTP
–
General Header
Cache-Control = "Cache-Control" ":" l#cache-directive
cache-directive = cache-request-directive | cache-response-directive
cache-request-directive
cache-response-directive
“no-cache”
| “no-store”
| “max-age” “=“ delta-seconds
| “max-stale” [“=“ delta-seconds]
| “min-fresh” “=“ delta-seconds
| “no-transform”
| “only-if-cached”
| “cache-extension”
“public”
| “private”
| “no-cache”
| “no-store”
| “no-transform”
| “must-revalidate”
| “proxy-revalidate”
| “max-age” “=“ delta-seconds
| “s-max-age” “=“ delta-seconds
| “cache-extension”
PCW - C3.Recapitulare
Mesaje HTTP
–
General Header
Cache-Control = "Cache-Control" ":" l#cache-directive
cache-directive = cache-request-directive | cache-response-directive
-
-
max-age
in mesaje cerere (raspunsul din cache poate fi folosit doar daca nu
este mai vechi decat delta-seconds)
in mesaje raspuns (raspunsul poate fi stocat pentru cereri care vin in
intervalul specificat )
private – in mesaje raspuns (mesajul nu poate fi stocat in cache-uri
publice fiind destinat unui singur utilizator)
no-cache
in mesaje cerere (forteaza trimiterea cererii la serverul original)
in mesaje raspuns (nu permite stocarea mesajului)
PCW - C3.Recapitulare
HTTP caching – mecanismul de expirare
Expirare specificata de server
specificarea explicita a timpului de expirare:
headerul Expires
Cache-control : max age
fortarea validarii fiecarei cereri:
Cache-control : must-revalidate
Expirare calculata euristic
cand nu este furnizat un timp de expirare explicit
asignarea unui timp de expirare plauzibil pe baza
altor headere (ex. Last-Modified)
PCW - C3.Recapitulare
HTTP caching – mecanismul de validare
Validarea inregistrarii cache
cand cache-ul detine o inregistrare veche ce doreste
sa o furnizeze ca raspuns la o cerere
trebuie sa consulte serverul (sau un cache
intermediar) daca inregistrarea este inca utilizabila
permite evitarea
overhead-ului de retransmitere a unui full response
daca inregistrarea cache este valida
overhead-ului unui round-trip daca inregistrarea nu este
valida
PCW - C3.Recapitulare
HTTP caching – mecanismul de validare
Validarea inregistrarii cache
prin metode conditionale si “cache validators”
la generarea unui raspuns serverul ataseaza un cache
validator
cand un client (user agent sau proxy cache) face o
cerere conditionala pt o resursa din cache se trimite la
server si validatorul asociat
Daca validatorul din cache=validatorul de pe server,
atunci 304 (Not Modified)
PCW - C3.Recapitulare
HTTP caching – mecanismul de validare
Validarea inregistrarii cache
“cache validators”:
Momentul ultimei modificari a resursei
Setat cu headerul Last-Modified
Cache-ul trimite o cerere conditionala cu header-ul
If-Modified-Since
Identificatori unici: headerul Etag
Sunt generati de server si se modifica de fiecare data
cand se modifica resursa
Cache-ul trimite o cerere conditionala cu header-ul IfNone-Match
majoritatea serverelor web moderne genereaza automat
headerele Last-Modified si ETag
PCW - C3.Recapitulare
HTTP caching – mecanismul de validare
Cache-aware scripts
Implicit majoritatea scripturilor nu returneaza un
validator sau informatii de expirare
Scripturi cacheable:
Daca produc un rezultat ce poate fi reprodus ulterior cu
o cerere identica
Daca continutul se modifica numai in functie de
continutul URL-ului
Scripturi non-cacheable:
Daca rezultatul depinde de un cookie, informatii de
autentificare sau alte criterii externe
PCW - C3.Recapitulare
// $image_blob is the contents of a JPEG.
// $image_date is the timestamp the image was last changed.
// If the browser supplied an If-Modified-Since header that is not
HTTP
caching – mecanismul de validare
// later than the modified date, issue a 304 header.
if (
isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
Cache-aware scripts
&&
Implicit
majoritatea
scripturilor nu returneaza un
$image_date
<=
strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])
validator sau informatii de expirare
)
{ Scripturi cacheable:
header('HTTP/1.1 304 Not Modified');
Daca produc un
rezultat ce poate fi reprodus ulterior cu
header('Content-Length:
0');
o cerere identica
exit;
}
Daca continutul se modifica numai in functie de
continutul URL-ului
// Otherwise, send the image and appropriate headers.
else Scripturi non-cacheable:
{
Daca rezultatul depinde de un cookie, informatii de
header('Content-Type:
autentificareimage/jpeg');
sau alte criterii externe
header('Content-Length: ' . strlen($image_blob));
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $image_date) . ' GMT');
header('Pragma: public');
print $image_blob;
exit;
PCW - C3.Recapitulare
}
HTTP caching – implementare
Servere Web
Apache HTTP Server
modulele expires_module si headers-module
fisierul .htaccess
### activate mod_expires
ExpiresActive On
### Expire .gif's 1 month from when they're accessed
ExpiresByType image/gif A2592000
### Expire everything else 1 day from when it's last modified
### (this uses the Alternative syntax)
ExpiresDefault "modification plus 1 day"
### Apply a Cache-Control header to index.html
<Files index.html>
Header append Cache-Control "public, must-revalidate"
</Files>
Microsoft IIS
Headerele HTTP pot fi configurate din interfata
PCW - C3.Recapitulare
HTTP caching – implementare
Servere Web
Apache HTTP Server
modulele expires_module si headers-module
fisierul .htaccess
### activate mod_expires
ExpiresActive On
### Expire .gif's 1 month from when they're accessed
ExpiresByType image/gif A2592000
### Expire everything else 1 day from when it's last modified
### (this uses the Alternative syntax)
ExpiresDefault "modification plus 1 day"
### Apply a Cache-Control header to index.html
<Files index.html>
Header append Cache-Control "public, must-revalidate"
</Files>
Microsoft IIS
Headerele HTTP pot fi configurate din interfata
PCW - C3.Recapitulare
Mesaje HTTP
– Full Request/Response
Request
Response
Request Line
Response Line
identifica tipul mesajului si
resursa ceruta
informatii despre statusul
acestui raspuns
General Header
campuri aplicabile atat cererii cat si raspunsului, dar nu
si entitatii transferate
Request Header
informatii despre cerere si
despre client
Response Header
informatii despre raspuns
Entity Header
informatii despre resursa identificata de cerere si despre
entity body
Entity Body
corpul mesajului
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Request Header
Accept
Accept-charset
Accept-encoding
Accept-language
Authorization
From
Host
If-modified-since
Proxy-authorization
Range
Referer
Unless
User-agent
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Request Header
Accept
Accept-charsetO lista de tipuri media acceptabile ca
Accept-encoding
raspuns la acest mesaj
Accept-language
Authorization
From
Host
If-modified-since
Proxy-authorization
Range
Referer
Unless
User-agent
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Request Header
Accept
Accept-charset
Accept-encoding
Accept-language
Credentials – utilizate de client pt a se
Authorization
autentifica in fata serverului
From
Host
If-modified-since
Proxy-authorization
Range
Referer
Unless
User-agent
PCW - C3.Recapitulare
Mesaje HTTP - Cerere
Request Header
Accept
Accept-charset
Accept-encoding
Accept-language
Authorization
From
Permite clientului sa se autentifice in fata
Host
unui proxy care necesita autentificare
If-modified-since
Proxy-authorization
Range
Referer
Unless
User-agent
PCW - C3.Recapitulare
Mesaje HTTP - Raspuns
Response Header
Location – defineste locatia exacta a resursei
Proxy-authenticate – impreuna cu status code 407
(Proxy Authentication Required)
Public – enumera metodele non-standard suportate de
server
Retry-after – impreuna cu status code 503 (Service
Unavailable)
Server – identifica produsul software utilizat de server
pentru tratarea cererei
WWW-authenticate – impreuna cu status code 401
(Unauthorized)
PCW - C3.Recapitulare
Mesaje HTTP - Raspuns
Entitati = entity header + entity body
Entity header:
Allow
Content-encoding
Content-length
Content-MD5
Content-type
Expires
Title
Transfer-encoding
PCW - C3.Recapitulare
Mesaje HTTP - Raspuns
Entitati – Entity Body
-
-
secventa arbitrara de octeti (text, date binare, imagini,
audio, video)
Interpretarea este determinata de campurile din Entity
Header: Content-Encoding, Content-Type si TransferEncoding
entity-body := Transfer-Encoding( Content-Encoding(
Content-Type ( data )))
data = continutul resursei
Content-Type – determina modul in care sunt interpretate
datele (MIME type)
Content-Encoding – datele pot fi codate si aceasta codare
stocata la acel URI in locul datelor (ex. compresie zip)
Transfer-Encoding – poate fi aplicata la transfer pentru a
forma corpul mesajului (ex. chunked)
PCW - C3.Recapitulare
MIME
Multipurpose Internet Mail Extensions
-
-
Content-Type: tip/subtip
Tipuri MIME principale:
text defineste formatele text (text/plain, text/html,
text/xml, text/css)
image specifica formatele grafice (image/png, image/jpeg,
image/gif)
application defineste aplicatiile client
(application/executable, application/javascript,
application/pdf)
audio specifica formatele audio (audio/basic, audio/x-wav,
audio/x-midi)
video specifica formatele video (video/mpeg,
video/quicktime)
multipart utilizat pentru transmiterea datelor compuse
PCW - C3.Recapitulare
Client request (no authentication)
Client
request
GET /private/index.html HTTP/1.0
(Host:
user name "Aladdin", password "open sesame")
localhost
HTTP – autentificare acces
(codificare credentials: Base64(Aladdin:open sesame))
GET /private/index.html HTTP/1.0
Host:
localhost
autentificare
Server
response de tip “challenge-response”
HTTP/1.0
401 Authorization
Required
Authorization:
Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
2 tipuri:
client-server
si client-proxy
Server: HTTPd/1.0
Challenge
(trimis
de server/proxy):
Date:
Sat,
27 Nov
2004 10:18:15
GMT
Server
response
challenge
auth-scheme
realm *( "," auth-param
)
WWW-Authenticate:
Basic 1*SP
realm="Secure
Area"
HTTP/1.0
200= OK
Content-Type:
text/html
auth-scheme
= token
Server:
HTTPd/1.0
Content-Length:
311
auth-param
token
"=" quoted-string
Date:
Sat, 27 =Nov
2004
10:19:07 GMT
realm = "realm"
"=" realm-value
Content-Type:
text/html
<!DOCTYPE
HTML= PUBLIC
"-//W3C//DTD HTML 4.01
realm-value
quoted-string
Content-Length:
10476
Transitional//EN" "http://www.w3.org/TR/1999/REC Raspuns (trimis de client):
html401-19991224/loose.dtd">
<HTML> <HEAD>
…
<TITLE>Error</TITLE>
<META HTTP-EQUIV="Content-Type"
credentials = basic-credentials
| auth-scheme *("," auth-param )
CONTENT="text/html; charset=ISO-8859-1"> </HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY> </HTML>
PCW - C3.Recapitulare
HTTP 1.0 vs 1.1
Caching
Cache entry: fresh/stale – revalidare inregistrari vechi
If-Modified-Since – erori de sincronizare, rezolutie
HTTP 1.1:
entity tag (ETag)
If-None-Match, If-Unmodified-Since, If-Match
Cache-Control (max-age, private, no-store,…)
Bandwith optimization
Range requests
New status code: 100 Continue
Negocierea compresiei
conexiuni persistente – implicit
pipelining
Chunked transfer-coding (Transfer-Encoding: chunked )
Basic authentication -> Digest authentication (criptare username si parola)
Proxy authentication
Managementul conexiunii
Transmiterea mesajelor
Securitate si autentificare
…. http://www2.research.att.com/~bala/papers/h0vh1.html
PCW - C3.Recapitulare
HTTP 2.0
Goals:
asynchronous connection multiplexing
header compression,
request-response pipelining
SPDY (speedy) – Google, IETF draft
protocol pt. transportul continutului web
Chromium, Mozilla, Opera
reduce latenta incarcarii paginilor web
compresie, multiplexare, prioritizare
PCW - C3.Recapitulare
Client Web
Program ce permite accesarea
resurselor in World Wide Web
Deci,
identifica resursele prin URI-uri
acceseaza resurse printr-un protocol web
(“vorbeste” HTTP)
prezinta documentele web utilizatorului
(cunoaste limbaje de marcare)
PCW - C3.Recapitulare
Limbaje de marcare
- (X)HTML -
PCW - C3.Recapitulare
Limbaje de marcare
set de coduri ce dau instructiuni referitoare
la structura unui text si la modul de afisare
a acestuia
1967 – GenCode – adnotarea manuscriselor
1970-1980 – TeX – carti de matematica
Scribe, GML, SGML
HTML, XML, XHTML
text + instructiuni de marcare (tag-uri)
prezentarea altor tipuri de informatii
(imagini vectoriale, playlist-uri, servicii
web, etc)
PCW - C3.Recapitulare
Limbaje de marcare
Limbaje de marcare XML:
• Extensible Stylesheet Language
• MathML
• MusiXML
• MXML
• RSS
• Scalable Vector Graphics
• Synchronized Multimedia Integration Language
• Web Services Description Language
• X3D
• XAML
• XHTML
• XPath
• …
PCW - C3.Recapitulare
Limbaje de marcare
Limbaje de marcare de uz general:
•
GML – predecesor al SGML
•
SGML – predecesor al XML
•
XML
•
…
Limbaje de marcare a documentelor:
•
HTML
•
XHTML
•
MathML
•
TeX, LaTeX
•
…
Limbaje de marcare pentru mediatizarea continutului:
•
Atom
•
RSS
•
SyncML
•
…
PCW - C3.Recapitulare
Hypertext Markup Language (HTML)
limbaj universal pentru publicarea hypertext-ului pe
World Wide Web
descrie continutul si structura informatiilor intr-o
pagina web
format neproprietar bazat pe SGML
unelte de creare si redare:
- editor text
- unelte WYSIWYG (Dreamweaver, etc.)
text + indicatii de redare (tag)
numele fiecarui tag = element
sintaxa: <element> continut </element>
ex: <p>Acesta este un paragraf</p>
PCW - C3.Recapitulare
Structura unei pagini HTML
<html>
<head>
informatii despre pagina
</head>
<body>
continutul paginii
</body>
</html>
• header – descrie pagina
• body – continutul paginii
• fisier extensie .html, .htm
PCW - C3.Recapitulare
HTML - Versiuni
GML (IBM – Charles Goldfarb, ‘60) –
Generalized Markup Language
SGML (ISO 8879:1986) –
Standard Generalized Markup Language
HTML Tags – Tim Berners-Lee, 1991
IETF – 1993: "Hypertext Markup Language (HTML)" Internet-Draft,T.
Berners-Lee, D. Connolly
Dave Raggett, 1993: “HTML+ (Hypertext Markup Format)”
HTML 2.0 – IETF HTML WG, 1995 (RFC 1866)
HTML 3.2 – Ian 1997 (W3C)
HTML 4.0 –Dec 1997
HTML 4.01 – Dec 1999
XHTML 1.0 - 2000
HTML 5
2004: Web Hypertext Application Technology Working Group (WHATWG)
12 Mai 2012, W3C Working Draft
PCW - C3.Recapitulare
HTML vs XHTML
XHTML – eXtensible HyperText Markup Language
- reformulare a HTML/4.01 in XML
- mai extensibil (namespaces – includerea de fragmente din
alte limbaje bazate pe XML)
- interoperabilitate cu alte formate de date (bazate pe XML)
- divizare HTML in componente reutilizabile (XHTML
Modularization)
XHTML 1.0 (2000)
-
procesare si mentenanta mai usoara
elemente si atribute din HTML 4
3 “flavours”:
-
XHTML 1.0 Strict – HTML 4.01
XHTML 1.0 Transitional
-
-
browsere mai vechi (nu suporta style sheets)
include elemente prezentationale( ex. body + bgcolor, center, font, etc.)
XHTML 1.0 Frameset
PCW - C3.Recapitulare
HTML vs XHTML
XHTML Modularization
-
nu specifica un limbaj de marcare
-
modularizare abstracta a XHTML
-
implementare a abstractizarii folosind XML DTD
(Document Type Definition) si XML Schemas
-
descompunere a XHTML 1.0 in module abstracte
care furnizeaza tipuri specifice de functionalitati
PCW - C3.Recapitulare
HTML vs XHTML
XHTML Modularization
Avantaje:
alegerea elementelor suportate de un dispozitiv
simplificarea XHTML pentru dispozitive mici
extinderea XHTML pentru aplicatii complexe prin
adaugarea de noi functionalitati XML (ex. MathML, SVG,
Voice, Multimedia)
definirea de profile XHTML precum XHTML Basic (pt.
dispozitive mobile)
PCW - C3.Recapitulare
HTML vs XHTML
XHTML Modularization
Avantaje:
alegerea elementelor suportate de un dispozitiv
simplificarea XHTML pentru dispozitive mici
extinderea XHTML pentru aplicatii complexe prin
adaugarea de noi functionalitati XML (ex. MathML, SVG,
Voice, Multimedia)
definirea de profile XHTML precum XHTML Basic (un
subset al XHTML pt dispozitive mobile)
PCW - C3.Recapitulare
De ce XHTML?
99% din paginile HTML de pe Web au
macar o eroare!
browsere care “iarta”
W3C: manipularea “draconica” a erorilor
=> XHTML
MIME type: application/xhtml+xml
XHTML 1.0: application/html
WHAT WG (Mozilla, Opera):
alta viziune asupra Web-ului
backward compatibility => HTML 5
http://diveintohtml5.org/past.html
PCW - C3.Recapitulare
De ce XHTML?
limbaj mai rigid si mai structurat
interoperabilitate peste diferite browsere
web
mai probabil ca paginile web construite cu
XHTML sa fie afisate corect in viitor
poate fi usor interschimbat cu alte date
XML: SVG, MathML, MusicML, etc.
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
elementele XHTML trebuie sa fie corect
imbricate
elementele XHTML trebuie intotdeauna
inchise
elementele XHTML trebuie scrise cu litere
mici
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
elementele XHTML trebuie sa fie corect
imbricate
Gresit:
elementele
XHTML trebuie intotdeauna
<b><i>This text is bold and italic</b></i>
inchise
elementele
XHTML trebuie scrise cu litere
Corect:
mici
<b><i>This text is bold and italic</i></b>
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
elementele XHTML trebuie sa fie corect
imbricate
<ul>
elementele
XHTML trebuie intotdeauna
<li>Cafea</li>
<li>Ceai
inchise
<ul>
<li>Ceai
negru</li>
elementele XHTML
trebuie
scrise cu litere
<li>Ceai verde</li>
mici
</ul>
<li>Lapte</li>
documentele
XHTML trebuie sa contina un
</ul>
element root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
elementele XHTML trebuie sa fie corect
imbricate
<ul>
elementele
XHTML trebuie intotdeauna
<li>Cafea</li>
<li>Ceai
inchise
<ul>
<li>Ceai
negru</li>
elementele XHTML
trebuie
scrise cu litere
<li>Ceai verde</li>
mici
</ul>
</li>
documentele
XHTML trebuie sa contina un
<li>Lapte</li>
</ul>
element
root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
<p>Un paragraf
<p>Alt paragraf
elementele
XHTML
trebuie sa fie corect
imbricate
elementele XHTML trebuie intotdeauna
inchise
elementele XHTML trebuie scrise cu litere
mici
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
<p>Un paragraf</p>
<p>Alt paragraf</p>
elementele
XHTML trebuie
sa fie corect
imbricate
elementele XHTML trebuie intotdeauna
inchise
elementele XHTML trebuie scrise cu litere
mici
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
A break: <br>
A horizontal rule: <hr>
elementele XHTML trebuie sa fie corect
An image: <img src="happy.gif" alt="Happy face">
imbricate
elementele XHTML trebuie intotdeauna
inchise
elementele XHTML trebuie scrise cu litere
mici
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
A break: <br />
A horizontal rule: <hr />
elementele XHTML trebuie sa fie corect
An image: <img src="happy.gif" alt="Happy face“
imbricate
elementele XHTML trebuie intotdeauna
inchise
elementele XHTML trebuie scrise cu litere
mici
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
/>
HTML vs XHTML
Gresit:
<BODY>
Diferente:
<P>This is a paragraph</P>
</BODY>
elementele XHTML trebuie sa fie corect
Corect:
imbricate
<body>
elementele
XHTML
trebuie intotdeauna
<p>This is
a paragraph</p>
</body>
inchise
elementele XHTML trebuie scrise cu litere
mici
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
HTML vs XHTML
Diferente:
elementele XHTML trebuie sa fie corect
imbricate
<html>
elementele
XHTML
<head>
... trebuie
</head> intotdeauna
inchise <body> ... </body>
</html>
elementele
XHTML trebuie scrise cu litere
mici
documentele XHTML trebuie sa contina un
element root
PCW - C3.Recapitulare
HTML vs XHTML
Alte reguli de sintaxa XHTML:
Numele atributelor trebuie sa fie scrise cu
litere mici
Valorile atributelor trebuie sa fie scrise intre
ghilimele
Minimizarea atributelor este interzisa
Atributul id inlocuieste atributul name
XHTML DTD defineste elemente obligatorii
PCW - C3.Recapitulare
HTML vs XHTML
Alte reguli de sintaxa XHTML:
Numele atributelor trebuie sa fie scrise cu
litere mici
Valorile atributelor trebuie sa fie scrise intre
Gresit:
ghilimele
<table WIDTH="100%">
Minimizarea
Corect: atributelor este interzisa
<table
width="100%">atributul name
Atributul
id inlocuieste
XHTML DTD defineste elemente obligatorii
PCW - C3.Recapitulare
HTML vs XHTML
Alte reguli de sintaxa XHTML:
Numele atributelor trebuie sa fie scrise cu
litere mici
Valorile atributelor trebuie sa fie scrise intre
ghilimele
Minimizarea
Gresit: atributelor este interzisa
<table width=100%>
Atributul
id inlocuieste atributul name
Corect:
XHTML<table
DTD defineste
elemente obligatorii
width="100%">
PCW - C3.Recapitulare
HTML vs XHTML
Alte reguli de sintaxa XHTML:
Gresit:
<input checked>
<input
readonly>
Corect:
Numele
atributelor
trebuie sa fie scrise cu
<input disabled>
<input checked=“checked”/>
litere
mici
<input readonly=“readonly”/>
<option
selected>
<input disabled=“disabled”/>
Valorile atributelor
trebuie
sa fie scrise intre
<option
selected=“selected”/>
ghilimele
Minimizarea atributelor este interzisa
Atributul id inlocuieste atributul name
XHTML DTD defineste elemente obligatorii
PCW - C3.Recapitulare
HTML vs XHTML
Alte reguli de sintaxa XHTML:
Gresit:
<input checked>
<input
readonly>
Corect:
Numele
atributelor
trebuie sa fie scrise cu
<input disabled>
<input checked=“checked”/>
litere
mici
<input readonly=“readonly”/>
<option
selected>
<input disabled=“disabled”/>
Valorile atributelor
trebuie
sa fie scrise
<option
selected=“selected”/>
intre ghilimele
Minimizarea atributelor este interzisa
Atributul id inlocuieste atributul name
XHTML DTD defineste elemente obligatorii
PCW - C3.Recapitulare
HTML vs XHTML
Alte reguli de sintaxa XHTML:
Gresit:
<img
src="picture.gif“
name="picture1"
/> scrise cu
Numele
atributelor
trebuie
sa
fie
Corect:
mici
<img litere
src="picture.gif“
id="picture1" />
<img
src="picture.gif“
id="picture1
Valorile
atributelor
trebuie sa“name="picture1"
fie scrise intre/>
ghilimele
Minimizarea atributelor este interzisa
Atributul id inlocuieste atributul name
XHTML DTD defineste elemente obligatorii
PCW - C3.Recapitulare
HTML vs XHTML
Alte reguli de sintaxa XHTML:
Numele atributelor trebuie sa fie scrise cu
litere mici
Valorile atributelor trebuie sa fie scrise intre
ghilimele
DOCTYPE,
Minimizarea
atributelor
este interzisa
head, title,
body
Atributul id inlocuieste atributul name
XHTML DTD defineste elemente obligatorii
PCW - C3.Recapitulare
Structura unui document XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Titlul paginii</title>
</head>
<body>
</body>
</html>
XHTML DTD (Document Type Definition)
obligatorie (prima linie dintr-un document XHTML)
nu este element XHTML
descrie sintaxa permisa pentru marcajele XHTML (Strict, Transitional, Frameset)
PCW - C3.Recapitulare
Validare pagini XHTML
trebuie adaugata
definitia DTD ca prima
linie a documentului
W3C XHTML Validator,
Tidy
PCW - C3.Recapitulare
Elemente XHTML/HTML5
http://dev.w3.org/html5/spec/Overview.html
http://www.w3schools.com/html5/html5_reference.
asp
http://diveintohtml5.org/
http://html5demos.com/
Nota: HTML 5 nu este inca o recomandare W3C!
PCW - C3.Recapitulare
DOM/HTML
PCW - C3.Recapitulare
Document Object Model (DOM)
o reprezentare a documentelor
(X)HTML/XML sub forma unui set
de obiecte
cross-platform
language independent
permite accesarea si modificarea
dinamica a continutului,
structurii si stilului unui
document
PCW - C3.Recapitulare
Document Object Model (DOM)
Standardizare (W3C) – 3 parti:
Core DOM – model standard pt. orice document structurat
XML DOM – model standard pt. documente XML
HTML DOM - model standard pt. documente HTML
DOM Level 1 (1998)
core elements
getElementById
event model
suport pt. spatii de nume XML
suport pt. CSS
suport pt. Xpath
tratare evenimente tastatura
interfata pt. serializarea documentelor in format XML
DOM Level 2 (2000)
DOM Level 3 (2004)
DOM Level 4 (2012 – Draft v6)
PCW - C3.Recapitulare
DOM/HTML
PCW - C3.Recapitulare
Obiecte DOM globale
window : fereastra browser-ului
navigator : info despre browser-ul
folosit
screen : info despre zona de pe ecran
ocupata de browser
history : lista a paginilor vizitate de
utilizator
document : pagina HTML curenta
PCW - C3.Recapitulare
Tratarea evenimentelor
<h2 onclick="myFunction();">Click me!</h2>
elementele HTML au atribute speciale
denumite evenimente
functiile Javascript pot fi utilizate pentru
tratarea evenimentelor
functia se va executa la interactiunea cu
elementul respectiv
attribute HTML de tip eveniment :
onabort, onblur, onchange, onclick, ondblclick,
onerror, onfocus, onkeydown, onkeypress, onkeyup,
onload
PCW - C3.Recapitulare
document object si getElementById
<h2 onclick="makeRed();">Sell</h2>
<p id="announce">Get it while it's hot!</p>
function makeRed() {
var para = document.getElementById("announce");
para.style.color = "red";
}
metoda getElementById a obiectului document returneaza
un obiect reprezentand un element HTML cu atributul id
furnizat (null daca nu este gasit)
obiectele DOM pentru toate elementele HTML contin
urmatoarele proprietati:
className, id, style, title
PCW - C3.Recapitulare
DOM/HTML
Proprietati
<html>
x.innerHTML
- the text value of x
<body>
x.nodeName - the name of x
x.nodeValue
- the value ofWorld!</p>
x
<p id="intro">Hello
x.parentNode - the parent node of x
x.childNodes
- the child nodes of x
<script type="text/javascript">
document.getElementById("intro").childNodes[0].nodeValue;
x.attributes
- the attributes nodes of x
txt=document.getElementById("intro").innerHTML;
document.write("<p>The text from the intro
Metode
paragraph: " + txt + "</p>");
x.getElementById(id)
- get the element with a specified id
</script>
x.getElementsByTagName(name) - get all elements with a
specified
tag name
</body>
x.appendChild(node)
- insert a child node to x
</html>
x.removeChild(node) - remove a child node from x
PCW - C3.Recapitulare