Documente Academic
Documente Profesional
Documente Cultură
Curs 1 - HTTP
Curs 1 - HTTP
Descriere generală
Protocol de nivel de aplicație
Protocol request-response
Comunicare sincronă
Date transmise text
Inițierea comunicației se face doar de către
client
Protocol în principiu stateless
Protocol request-response
Sesiunea HTTP este formată din cerea
clientului și răspunsul serverului
Nu se menține stare între request-uri
succesive
Pentru menținerea stării unei aplicații se
utilizează header-ele (fie prin sesiuni sau
prin cookies)
Comunicare sincronă
După ce face cererea, clientul așteaptă un
răspuns
La primirea răspunsului, clientul încarcă
conținutul primit
Alternativa este AJAX prin care se menține o
conexiune HTTP deschisă și se verifică
starea conexiunii
Servere de web
Livrează resurse web
Execută cod prin intermediul unor containere
Suportă virtual hosting, securitate etc.
Apache, NGINX, IIS etc.
Resurse web
Nu neapărat fișiere
Nu neapărat text (deși resursele binare sunt
encodate ca text)
Tipul resursei este definit prin MIME types
Două perspective asupra resursei, remote și
local
Scheme de adresare
URL(Uniform Resource Locator) - locația
unică unei resurse
URN (Uniform Resource Name) - numele unic
al unei resurse
URI(Uniform Resource Identifier) -
identificatorul unic al unei resurse
URL
Conțin caracterele limbii engleze, cifrele de la
0 la 9 și -_~.
De asemenea, există o serie de caractere
care pot fi folosite cu ”percent encoding” e.g.
spațiu este utilizabil ca %20
Există o extensie a standardului care permite
utilizarea de URL-uri care conțin toate
caracterele UTF-8
URL
URL-urile se utilizează pentru HTTP, dar și
FTP, JDBC etc.
Forma generală:
schema://server:port/cale?parametri#fragment
schema de nume - identifică protocolul utilizat care
determină și forma URL-ului
server - numele sau adresa serverului; se pot obține
unul din altul prin intermediul DNS (Domain Name
Service)
URL
Forma generală:
schema://server:port/cale?parametri#fragment
port - identifică aplicație pe calculatorul destinație;
browser-ul presupune portul 80 (portul tipic), dar se
poate utiliza orice port neocupat
parametri - listă de perechi cheie-valoare separate de
& e.g. name=Andrei&age=32
fragment - identifică în principiu poziția în interiorul
documentului
Metode HTTP
OPTIONS - returnează setul de metode
suportate pentru un URL
GET - returnează resursa de la locația
specificată
POST - cere serverului să adauge o
subresursă la locația specificată
Metode HTTP
PUT - cere serverului să înlocuiască resursa
de la locația specificată
DELETE - cere serverului să șteargă resursa
de la locația specificată
PATCH - cere serverului să actualizeze
resursa de la locația specificată
HEAD - echivalent unui GET, nereturnând
însă corpul mesajului
TRACE
CONNECT
Request-ul HTTP
O linie de request care specifică metoda și
adresa resursei
Un număr oarecare de header-e
O linie goală
(Opțional) un corp de request
Coduri de răspuns
1xx - informativ
2xx - succes
3xx - redirectări
4xx - erori client-side
5xx - erori server-side
Response-ul HTTP
O linie de status, conținând codul de răspuns
și justificarea (corespunde codului)
Un număr de headere de răspuns
O linie goală
(Opțional) un corp de răspuns
Conținut multimedia
Acoperă text non-ASCII, imagini, video etc.
Definirea tipului de date se face prin tipuri
MIME
Protocolul fiind fundamental un protocol text,
datele multimedia trebuie encodate text (i.e.
Base64 encoding)
Tipul se specifică prin header-ul Content-Type
Mecanisme HTTP
Header-ele sunt perechi cheie valoare prin
care se extinde comportamentu protocolului
Pot memora tipul conținutului, lungimea,
posiblitatea compresiei etc
Mecanisme HTTP
Redirect - atunci când server-ul nu poate livra
o resursă dar îi știe locația, va răspunde cu
un cod din gama 3--
Clientul va cere resursa de la noua locație,
trecând prin redirecturi succesive până când
ajunge fie la un cod de succes fie la unul de
eroare
Mecanisme HTTP
ETAG - un caz special de redirect
Fiecărei resurse îi corespunde o cheie ( header-ul
ETAG)
Atunci când clientul cere o resursă pe care o are în
cache trimite și ETAG-ul (header-ul If-None-Match)
Dacă acesta corespunde cu al server-ului i se
răspunde cu 304, altfeli se livrează versiunea
curentă a resursei
Mecanisme HTTP
Exista si posibilitatea pentru caching
tradițional cu header-ele cache-control și
expires
Mecanisme HTTP
Sesiuni și cookies
HTTP asincron
Compresie
REST
Caracteristici REpresentational State Transfer
Acces la obiecte la distanță peste HTTP
Vocabular limitat
Identificarea semanticii prin URL
JSON
(una dintre) reprezentările native JavaScript
pentru obiecte
Simplă, nu necesită descrierea tipului
Orice mecanism de discovery e complicat sau
inutil
Miscelanee
API-uri REST
Clean URLs
HTTPS
HTTP/2
Păstrează mare parte dintre mecanismele
HTTP 1.1
Bazat pe SPDY
Protocol binar
Discută la nivel de ‘frame’ unde un frame
poate avea scop diferit (headers, data etc.)
HTTP/2
Introduce compresia si pentru headers,
metoda, url etc. la nivel conexiunii nu la
nivelul requestului (HPACK)
Funcționează (practic) numai peste TLS;
cerința pentru criptare nu e în stadard dar
toate implementările o au
HTTP/2
Elimină elementele blocante ale versiunii 1
Se pot cere mai multe resurse pe o
conexiune, pe care serverul le poate livra în
orice ordine
Resursele se livrează în stream-uri de resurse
și sunt prioritizabile
De asemenea serverul poate trimite și resurse
care nu au fost încă cerute de client
Bibliografie
HTTP: The Definitive Guide: The Definitive
Guide, Gourley et. al., O Reilly 2009
https://http2.github.io/http2-spec/
https://www.youtube.com/watch?v=r5oT_2ndj
ms
HTML
HyperText Markup Language
HTML
limbaj de descriere structurală
multe componente au conținut semantic
nu conține cod executabil în sensul clasic
bazat pe o structură de tag-uri și atribute
HTML 5
HTML a evoluat de la un limbaj bazat pe
SGML, la variații bazate pe XML
HTML5 deconectează standardul limbajului
de predecesori
Tag-uri
Reprezentarea tag-urilor
<tag>content</tag>
Reprezentarea prescurtată a tag-urilor fără
conținut
<tag />
Setul de tag-uri nu e extensibil la nivel HTML
Extensibil prin JavaScript (e.g. angularjs)
Atribute
Tag-urile suportă o serie de atribute
Atributele sunt perechi cheie valoare, unde toate tag-
urile cu aceleși tip au aceleași atribute, dar valori
diferite
atribut=”valoare” sau atribute=’valoare’
în HTML5 atribut=valoare (atâta timp cât nu există
ambiguitate)
Unele atribute sunt generale
Există un set de atribute specifice pentru tratarea de
evenimente
Structură fundamentală
<!DOCTYPE html>
<html>
<head></head>
<body></body>
</html>
Structură fundamentală
DOCTYPE specifică versiunea fișierului
HTML (și ce set de tag-uri sunt suportate)
HEAD conține metainstrucțiuni necesare
pentru afișarea paginii
BODY cuprinde conținutul afișabil efectiv
Conținut HEAD
TITLE - titlul paginii
tag-uri META
BASE - pentru link-uri relative, baza de la care
acestea sunt calculate
includerea de resurse
Resurse
LINK, STYLE, SCRIPT - resurse incluse în
fișierul HTML, fie direct, fie specificând un
fișier
<link rel='stylesheet' href="css/style.css"
type="text/css" />
<style type="text/css"></style>
Resurse
SCRIPT - definește inline sau include script-
uri
<script type=”text/javascript”></script>
În XHTML, pentru a împiedica parsarea
conținutului ca XML, trebuie pus într-un bloc
CDATA
Meta
cuprinde informații care sunt destinate a fi
parsate automat, nu afișate
comportament diferit pe baza unor atribute
<meta name="keywords" content="some words">
<meta name="description" content="some words">
<meta name="author" content="Andrei">
<meta http-equiv="refresh" content="30">
<META http-equiv="refresh" content="5;URL=http://andrei.ase.ro">
<meta charset="UTF-8">
Atribute globale
id - identifică unic un tag
class - specifică una sau mai multe clase
asociate tag-lui (descrise separat într-un
fișier CSS)
style - modifică inline proprietățile stilului
asociat tag-ului
Atribute globale
title - specifică informație suplimentară legată
de tag-ul respectiv (i.e. tooltip)
lang - specifică limba asociată conținutului
tag-ului
accesskey - cheie de acces rapid pentru
componentă
Atribute globale
tabindex - ordinea de selecție a componentei
la navigarea cu tasta TAB
dir - direcția de afișare a conținutului
componentei
o serie de atribute sunt adăugate în HTML5:
contenteditable, contextmenu, draggable,
dropzone, hidden, spellcheck, translate,
data-
Evenimente
Există o serie de atribute care suportă
definirea de handler-e de evenimente pe
componentele HTML
Evenimentele vor fi tratate de cod JavaScript
Atributele diferă în funcție de evenimentele
suportate de o anumită componentă
Evenimente
O listă completă -
http://www.w3schools.com/tags/ref_eventattr
ibutes.asp
Tag-uri structurale tradiționale
H1, H2, H3, H4, H5, H6 - titluri de subsecțiuni
DIV - diviziune anonimă care cuprinde o serie
de componente HTML
SPAN - diviziune inline
Tag-uri structurale noi
În html5 apar o serie de tag-uri structurale noi
care descriu semantic structura unei pagini
article, aside, header, footer, header, main etc.
Ancore
Conceptul fundamental al HTTP
Specifică unde se poate găsi o resursă
înrudită
Adresele sunt specificate prin atributul href
Adrese pot fi absolute sau relative
Pentru adrese relative, dacă există un tag
base, adresa va fi obținută prin
concatenarea base href cu anchor href
Ancore
Format
<a href=”url” rel=”sens” target=”destinatie”>text</a>
Exemple
<a href=”http://somewhere.com”>click me!</a>
<a href=”./content/main.html”>click me!</a>
cu base
<base href="http://somewhere.com/content">
<a href=”somefile.html”>click me!</a>
Imagini
Conținutul multimedia tradițional al paginilor
web
În HTML5 se adaugă audio și video
Adresa imaginilor se calculează de la base,
dacă acesta există
Suportă image maps (imagini cu zone care
reactionează diferit la click)
Imagini
<img src=”someimage.jpg” alt=”text”/>
Cu map:
<img src=”someimage.jpg” alt=”text”
usemap=”#mymap”/>
<map name="mymap">
<area shape="rect" coords="0,0,100,100"
href="somefile.html" alt="file">
</map>
Tabele
TABLE - definește tabelul
THEAD - definește headerul tabelului
TFOOT - definește headerul tabelului
TH - o celulă a header-ului
TBODY - definește conținutul tabelului
TR - un rând al conținutului
TD - o celulă a conținutului
Tabele
<table>
<thead>
<th>Name</th>
<th>Characteristics</th>
</thead>
<tbody>
<tr>
<td>Name 1</td>
<td>Prop 1
</td>
</tr>
</tbody>
</table>
Liste
Liste ordonate
lista e definită cu OL
componentele liste sunt definite cu LI
Liste neordonate
lista e definită cu UL
componentele liste sunt definite cu LI
Liste
<ol>
<li> First ordered item </li>
<li> Second ordered item </li>
</ol>
<ul>
<li> First unordered item </li>
<li> Second unordered item </li>
</ul>
Formulare
Trimite informație la un server printr-o metodă HTTP
Conținutul formularului este trimis url encoded (listă de
perechi cheie-valoare)
param1=value1¶m2=value2
Dacă se utilizează GET, parametrii vor fi trimiși prin
secțiuea de parametri a URL-ului, pentru POST, vor fi
trimiși în corpul request-ului
Formulare
Forma generală
<form action=”test.asp” method=”POST”>
<!-- componente -->
</form>
Lista de componente de input este extinsă în HTML5
datalist, keygen, output
Componente de input
text
<input type=”text” name=”somename” />
password
<input type=”password” name=”somename” />
hidden
<input type=”hidden” name=”somename” />
Componente de input
radio button
<input type="radio" name="sex" value="male" /> Male
checkbox
<input type="checkbox" name="pet" value="cat" />Cat
<input type="checkbox" name="pet" value="Dog"
checked />Dog
Componente de input
submit - trimite conținutul formularului la server
<input type="submit" value="Submit" />
reset - resetează câmpurile formularului
<input type="reset" value="Reset" />
file - deschide o fereastră de selecție a unui
fișier
<input type="file" name="file" />
Componente de input noi (HTML5)