You are on page 1of 115

D

r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Tehnologii Web
Programare Web (I)




protocolul HTTP
generarea dinamica de continut via CGI

detalii in [CGI, 14-27, 46-58, 97-109, 153-177 + CD]
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Orice intrare trebuie platita.




Mihai Giugariu
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Ce este Web-ul?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Web-ul = spatiu informational compus
din elemente de interes, numite resurse,
desemnate de identificatori globali URI/IRI
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Web-ul = spatiu informational compus
din elemente de interes, numite resurse,
desemnate de identificatori globali URI/IRI


detalii la www.w3.org/TR/webarch/
recomandare W3C, 2004
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

resurse Web
Aspecte de interes

identificarea

interactiunea

reprezentarea prin formate de date
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

resurse Web
Aspecte de interes

identificarea

interactiunea

reprezentarea prin formate de date
URI/IRI
protocol:
HTTP
limbaj(e)
de marcare
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Cum are loc interactiunea
dintre client(i) si server(e) Web?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP
HyperText Transfer Protocol

bazat pe TCP/IP vezi RFC 2616

situat la nivelul aplicatie
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP
HyperText Transfer Protocol

protocol fiabil, de tip cerere/raspuns

port standard de acces: 80



HTTP/0.9, HTTP/1.0, HTTP/1.1
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: arhitectura
Server Web
daemon spirit protector


Client Web
navigator (browser), robot (crawler), player,
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: arhitectura
Server Web
Apache, Internet Information Services, Lighttpd, nginx,

Client Web
MosaicNetscapeMozillaFirefox,
Internet Explorer, Safari, wget, iTunes, Echofon etc.
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP
Cererea & rspunsul
accesarea eventual, modificarea reprezentrii
resursei via URI-ul asociat
Server
Web
Client
Web
cerere
rspuns
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Mesaj

unitatea de baza a unei comunicatii HTTP
(cerere sau raspuns)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Intermediar

proxy
poarta
tunel
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Proxy
localizat in proximitatea utilizatorului
are rol atat de server, cat si de client
Server
Web
Client
Web
p
r
o
x
y

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Poarta (gateway)
intermediar care ascunde serverul tinta,
clientul nestiind aceasta
Poarta
Web
Client
Web
Server
Web
Server
Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Tunel

rol de retransmitere eventual, criptata
a mesajului

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Tunel

rol de retransmitere eventual, criptata
a mesajului

context: protocolul HTTPS (HTTP securizat)

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

transmiterea criptata a datelor
vehiculate intre browser si
aplicatiile Web via extensia
HTTPS Everywhere

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Cache

zona locala de stocare n memorie, pe disc
a mesajelor (datelor) la nivel de server/client
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: termeni
Cache

zona locala de stocare n memorie, pe disc
a mesajelor (datelor) la nivel de server/client

context: asigurarea performantei aplicatiilor Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: mesaje
Mesaj HTTP = antet + corp
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: mesaje
Mesaj HTTP = antet + corp
meta-date
continut
propriu-zis

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: mesaje
Antet
include o multime de cimpuri

Message-header ::= field-name ":" [ field-value ] CRLF
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: mesaje
Cerere HTTP

Request ::= Method Request-URI ProtocolVersion CRLF
[ Message-header ] [ CRLF MIME-data ]



GET /~busaco/teach/ HTTP/1.1 CRLF
Host: profs.info.uaic.ro
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: mesaje
Raspuns HTTP

Status-line ::= HTTP-vers Digit Digit Digit Reason
CRLF Content



HTTP/1.1 200 OK CRLF
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: metode
GET

cerere efectuata de un client pentru accesul
la reprezentarea unei resurse

cod HTML, CSS, JavaScript, PNG, SVG, Atom,
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: metode
HEAD

similara cu GET, dar in mod uzual
se doresc doar meta-date

e.g., tipul MIME al resursei, ultima actualizare,
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: metode
POST

utilizata pentru trimiterea unor entitati
(date, actiuni) spre server

e.g., datele dintr-un formular Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: metode
PUT

plaseaza reprezentarea unei resurse pe server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: metode
DELETE

sterge o resursa reprezentarea ei de pe server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: metode
Remarca

uzual, browser-ul Web permite doar
folosirea metodelor GET si POST
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: reprezentari ale resursei
Codificarea setului de caractere (encoding)

ISO-8859-1
ISO-8859-2
KOI8-R
ISO-2022-JP
UTF-8
UTF-16 Little Endian

implicit
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: reprezentari ale resursei
Codificarea mesajelor

comprimare, asigurarea identitatii
si/sau integritatii

gzip, deflate
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: reprezentari ale resursei
Formatul reprezentarii

text
marcaje HTML, text obisnuit, cod JavaScript, format XML

sau

binar
imagini (JPEG, PNG), documente PDF, resurse multimedia

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: reprezentari ale resursei
Tipul continutului resursei

MIME type
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Content-Type

permite transferul datelor de orice tip

Content-Type: tip/subtip
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Content-Type

specificat prin MIME
(Multipurpose Internet Mail Extensions)

desemneaza un set de tipuri primare de continut
+ sub-tipuri aditionale

initial, utilizat in contextul postei electronice
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Tipuri MIME principale

text desemneaza formate textuale

text/plain fisier text neformatat
text/html document HTML
text/css foaie de stiluri CSS
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Tipuri MIME principale

image specifica formate grafice

image/jpeg fotografii JPEG (Joint Picture Experts Group)
image/png imagini PNG (Portable Network Graphics)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Tipuri MIME principale

audio desemneaza continuturi sonore

audio/mpeg fisier codificat in format MP3
specificatia privitoare la date audio a standardului MPEG
(Motion Picture Experts Group)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Tipuri MIME principale

video defineste continuturi video:
animatii, filme

video/mpeg resursa in format MPEG
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Tipuri MIME principale

application desemneaza formate
care vor putea fi procesate de aplicatii
disponibile la nivel de client

application/javascript program JavaScript
application/json date JSON (JavaScript Object Notation)
application/octet-stream sir arbitrar de octeti
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Tipuri MIME principale

multipart utilizat la transferul datelor compuse

multipart/mixed continut mixt
multipart/alternative continuturi alternative
e.g., calitati diferite de
stream-uri multimedia
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Location

Location ":" "http://" authority [ ":" port ] [ abs_path ]


redirecteaza clientul spre o alta reprezentare a resursei
(HTTP redirect)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Location

Location ":" "http://" authority [ ":" port ] [ abs_path ]


Location: http://www.infoiasi.ro:8080/s-a_mutat.html
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Accept

specifica tipul/tipurile de reprezentare
acceptate de client, plus calitatea

Accept: image/png,image/*;q=0.8,*/*;q=0.5

util pentru negocierea continutului (content negotiation)

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Cache-Control

stabileste parametrii de control ai cache-ului

la nivel de proxy, uzual

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Referer

desemneaza URI-ul resursei Web
care a referit resursa curenta

folosit pentru a determina de unde provin
accesarile unui document dat

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Host

specifica adresa IP sau simbolica a masinii
de pe care se solicita accesul la o resursa

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Authorization + WWW-Authenticate

utilizate la autorizarea accesului
la o resursa Web protejata




http://profs.info.uaic.ro/~busaco/publications/articles/admin-web.pdf

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: cimpuri (atribute)
Alte detalii la www.w3.org/Protocols/HTTP/

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: starea
Coduri de informare (1xx)

100 Continue
101 Switching Protocols
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: starea
Coduri de succes (2xx)

200 Ok
201 Created
202 Accepted
204 No Content
206 Partial Content
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: starea
Coduri de redirectare (3xx)

300 Multiple Choices
301 Moved Permanently
303 See Other
304 Not Modified
305 Use Proxy
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: starea
Coduri de eroare la nivel de client (4xx)

400 Bad Request
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timeout

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: starea
Coduri de eroare la nivel de server (5xx)

500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout


D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

heimdall.info.uaic.ro - - [27/Feb/2012:12:00:56 +0200] "GET /~busaco/ HTTP/1.1" 200
2752 "http://www.infoiasi.ro/bin/Structure/busaco" "Mozilla/5.0 (Windows NT 6.1)
AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
heimdall.info.uaic.ro - - [27/Feb/2012:12:00:55 +0200] "GET /~busaco HTTP/1.1" 301
200 "http://www.infoiasi.ro/bin/Structure/busaco" "...Safari/535.11"
193.22.173.97 - - [27/Feb/2012:12:00:55 +0200] "GET /~pers.academic HTTP/1.1" 404
189 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)"
msnbot.search.msn.com - - [27/Feb/2012:12:00:54 +0200] "GET /~rvlad/ HTTP/1.1" 200
15591 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
crawl.googlebot.com - - [27/Feb/2012:12:00:54 +0200] "GET /~web/ HTTP/1.1" 200
586 "-" "...Googlebot/2.1; +http://www.google.com/bot.html"
79.112.50.182 - - [27/Feb/2012:11:45:05 +0200] "GET /~orar/style.css HTTP/1.1" 200
151 "http://thor.info.uaic.ro/~orar/participanti/orar_I2B3.html" "...iPod; U; CPU iPhone OS
5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1
w4.uaic.ro - - [27/Feb/2012:09:47:05 +0200] "GET /~busaco/teach/courses/web/presenta
tions/web01ArhitecturaWeb.pdf HTTP/1.1" 206 2334991 "-" " Firefox/10.0.2"
c1.uaic.ro - - [27/Feb/2012:09:37:12 +0200] "GET /~vidrascu/So HTTP/1.1" 403
185 "-" " "Mozilla/5.0 (Linux; U; Android 2.3.3; en-us;"
109.166.140.11 - - [27/Feb/2012:09:16:16 +0200] "POST /~radu.nicolescu/web2012/
wp-admin/post.php?post=47&action=edit& HTTP/1.1" 200 1046 "-" "Macintosh 5.1"
jurnalizarea cererilor

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

GET /~busaco/teach/courses/web/web-film.html HTTP/1.1
Host: profs.info.uaic.ro
User-Agent: Mozilla/5.0 (rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://profs.info.uaic.ro/~busaco/teach/courses/web/
HTTP: exemplu de cerere

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP/1.1 200 OK
Date: Thu, 23 Feb 2012 17:32:36 GMT
Server: Apache
Last-Modified: Sun, 19 Feb 2012 18:54:51 GMT
Content-Encoding: gzip
Content-Length: 2120
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
lang="ro" xml:lang="ro">

</html>
c
o
n
t
i
n
u
t

p
r
o
p
r
i
u
-
z
i
s

campuri-antet
HTTP: exemplu de raspuns

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o


avansat
inspectarea online a mesajelor HTTP
via www.hurl.it
campuri
non-standard
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

HTTP: API-uri + instrumente
cURL + libcurl
(C, Java, Haskell, .NET, PHP, Ruby,) http://curl.haxx.se/
WinHTTP
(specific Windows: C/C++) http://tinyurl.com/6eemqqc
extensia Firebug pentru Firefox
(la nivel de client; JavaScript) http://getfirebug.com/
Google Chrome Developer Tools
http://code.google.com/chrome/devtools


avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Pot fi generate in mod dinamic
reprezentari de resurse Web?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi
Scop:
generarea dinamica la nivel de server
de reprezentari ale unor resurse
solicitate de clientii Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi
Scop:
generarea dinamica la nivel de server
de reprezentari ale unor resurse
solicitate de clientii Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi
Standard de facto pentru interactiunea
programatica a clientilor cu serverele Web

CGI/1.1


RFC 3875
http://www.w3.org/CGI/
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: caracterizare
Un program (script) CGI se invoca pe server

explicit

i.e., preluarea informatiilor dintr-un formular Web
la apasarea butonului de tip submit
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: caracterizare
Un program (script) CGI se invoca pe server

implicit

de exemplu, la fiecare vizita se genereaza dinamic
lista mesajelor recente emise de utilizatorii unui sit social
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: caracterizare
Script-urile CGI pot fi concepute
in orice limbaj disponibil pe server

limbaje interpretate
bash, Perl e.g., modulul Perl::CGI , Python, Ruby,...

limbaje compilate
C, C++ etc.
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: programare
Orice program CGI va scrie datele
reprezentarea resursei Web
la iesirea standard (stdout)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: programare
Pentru a desemna tipul reprezentarii generate,
se vor folosi anteturi HTTP,
recurgindu-se la standardul MIME



exemplu: Content-type: text/html
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: programare
Unui program CGI, datele de procesat
i se vor trimite la intrarea standard (stdin)
sau via variabile de mediu
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: programare
Interactiunea dintre clientul si serverul Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: variabile
Un script CGI are acces la variabile de mediu

specifice cererilor transmise spre programul CGI:

REQUEST_METHOD metoda HTTP (GET, POST,)
QUERY_STRING sir de interogare: date trimise de client
REMOTE_HOST, REMOTE_ADDR adresa clientului
CONTENT_TYPE tipul continutului conform MIME
CONTENT_LENGTH lungimea (in octeti) a continutului

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: variabile
Variabile suplimentare
generate, uzual, de serverul Web:

HTTP_ACCEPT tipurile MIME acceptate de browser
HTTP_COOKIE date despre cookie-uri
HTTP_HOST informatii despre gazda (client)
HTTP_USER_AGENT informatii privind navigatorul

si altele
cursul viitor
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: variabile
Script CGI care afiseaza variabilele de mediu:

#!/bin/bash
# Stabilim tipul continutului
echo "Content-type: text/plain";
echo

# Executam 'set'
set
variabile.cgi cu drepturi de citire & executie
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: variabile
rezultatul obtinut
de clientul Web
in urma invocarii
script-ului CGI
la nivel de server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
#!/bin/bash

echo "Content-type: text/html"
echo
echo "<p>Salut din CGI!</p>"

salut.cgi stocat in ~utilizator/html/cale/
invocare directa prin metoda GET:
http://domeniu/~utilizator/cale/salut.cgi
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
#!/bin/bash

echo "Content-type: text/html"
echo
echo "<p>Salut din CGI!</p>"

salut.cgi stocat in ~utilizator/html/cale/
invocare directa prin metoda GET:
http://domeniu/~utilizator/cale/salut.cgi
de experimentat
si alte tipuri MIME
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
Content-type: text/html
Content-type: text/plain
Content-type: text/xml
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
Content-type: text/html
Content-type: text/plain
Content-type: text/xml
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
Content-type: text/html
Content-type: text/plain
Content-type: text/xml
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

/* hello.c
(compilare cu gcc hello.c o hello.cgi) */
#include <stdio.h>

int main() {
int mesaje;

printf ("Content-type: text/html\n\n");

for (mesaje = 0; mesaje < 10; mesaje++) {
printf ("<p>Hello, world!</p>");
}

return 0;
}
#!/usr/bin/python
# hello.py.cgi

print "Content-type: text/html\n"

for mesaje in range (0, 10):
print "<p>Hello, world!</p>"
#!/bin/bash
# hello.sh.cgi

echo "Content-type: text/html"
echo

MESAJE=0
while [ $MESAJE -lt 10 ]
do
echo "<p>Hello, world!</p>"
let MESAJE=MESAJE+1
done
programe CGI scrise in C, bash,
Python generand acelasi
continut marcat in HTML
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
<form action="http://www.infoiasi.ro/cgi-bin/max.cgi"
method="GET">
<p>Va rugam, introduceti doua numere:
<input type="text" name="nr1" />
<input type="text" name="nr2" /> </p>
<p><input type="submit" value="Afla maximul" /></p>
</form>
invocare dintr-un formular interactiv GET sau POST

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare prin GET
URL special
cazul GET
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare prin GET
Pentru fiecare cimp al formularului, se genereaza
o pereche nume_cimp=valoare delimitata de &
ce va fi adaugata URL-ului unde e stocat programul CGI:

http://www.infoiasi.ro/cgi-bin/max.cgi?nr1=7&nr2=4
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare prin GET
Pentru fiecare cimp al formularului, se genereaza
o pereche nume_cimp=valoare delimitata de &
ce va fi adaugata URL-ului unde e stocat programul CGI:

http://www.infoiasi.ro/cgi-bin/max.cgi?nr1=7&nr2=4

acest URL este codificat
URL encoding
vezi cursul 1
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
Serverul va invoca script-ul CGI pasindu-i datele
la intrarea standard
sau
via variabile de mediu
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
Procesarea datelor prin metoda GET
datele vor fi disponibile in variabila QUERY_STRING

printf ("Content-type: text/html\n\n");

data = getenv ("QUERY_STRING"); /* ia variabila de mediu */
sscanf (data, "nr1=%ld&nr2=%ld", &nr1, &nr2);

printf ("<p>Maximul dintre %ld si %ld este </p>",);
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: invocare
Procesarea datelor prin metoda POST
datele vor fi accesate de la stdin, lungimea in octeti
a acestora fiind preluata din CONTENT_LENGTH

printf ("Content-type: text/html\n\n");

lenstr = getenv ("CONTENT_LENGTH");
sscanf (lenstr, "%ld", &len);
fgets (data, len+1, stdin); /* citim de la intrarea standard */

printf ("<p>Maximul dintre %ld si %ld este </p>",);
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: GET vs. POST
Metoda GET se foloseste pentru generarea de
reprezentari ale resurselor cerute
(starea serverului nu trebuie sa se modifice)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: GET vs. POST
Metoda GET se foloseste pentru generarea de
reprezentari ale resurselor cerute
(starea serverului nu trebuie sa se modifice)

accesand datele prin GET, utilizatorul poate stabili
un bookmark pentru acces ulterior la o resursa Web
de ce?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: GET vs. POST
Metoda POST se utilizeaza atunci cand datele transmise
serverului au dimensiuni mari (continut de fisiere)
sau sunt delicate e.g., parole
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cgi: GET vs. POST
Metoda POST se utilizeaza atunci cand datele transmise
serverului au dimensiuni mari (continut de fisiere)
sau sunt delicate e.g., parole

de asemenea, cand invocarea scriptului
poate conduce la modificari ale starii pe server:
adaugarea unei inregistrari, alterarea unui fisier,...
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Script-urile CGI ar putea fi invocate direct
din paginile Web?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes
Scop:

posibilitatea executiei script-urilor CGI
si a altor actiuni, direct dintr-un document Web


http://www.ssi-developer.net/ssi/
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes
Comenzi (directive) SSI:


<!--#directiva -->
incluse in
codul HTML
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes
Fisierele care contin directive SSI
au in mod uzual extensia .shtml
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes
Fisierele care contin directive SSI
au in mod uzual extensia .shtml

vezi maniera de configurare a serverului Web

e.g., pentru Apache:
http://httpd.apache.org/docs/trunk/howto/ssi.html
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes: comenzi
echo afiseaza valoarea anumitor variabile de mediu

<p>Data si timpul (de pe server):
<!--#echo var="DATE_LOCAL" --></p>
<p>Legtura prin care s-a ajuns aici:
<!--#echo var="HTTP_REFERER" --></p>
<p>Numele acestui document:
<!--#echo var="DOCUMENT_NAME" --></p>
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes: comenzi
fsize furnizeaza marimea unui fisier existent
pe server

<!--#fsize file="index.html" -->
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes: comenzi
flastmod ofera data ultimei modificari
a unui fisier aflat pe serverul Web

<p>Ultima actualizare:
<!--#flastmod file="web.html" --></p>
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes: comenzi
exec executa un script CGI (nu e permisa la IIS)

<!--#exec cgi="citat.pl.cgi" -->
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes: comenzi
exec executa un script CGI (nu e permisa la IIS)

<!--#exec cgi="citat.pl.cgi" -->
atentie la problemele de securitate ce pot aparea!
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes: comenzi
include include un fisier

<!--#include file="antet.html.inc" -->
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

server side includes: comenzi
Folosirea variabilelor definite de dezvoltator
si includerea de constructii conditionale

<!--#if expr="${InternetExplorer6}" -->
Ne pare rau
<!--#else -->
Bine ati venit la realitate!
<!--#endif -->
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

performanta
Invocarea concurenta a mai multor script-uri CGI
poate cauza probleme de performanta:

scalabilitatea
integrarea in aplicatii mai complexe
persistenta conexiunilor cu servere de baze de date
contextul invocarii (rularii)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

performanta: solutii
Includerea suportului pentru CGI
direct in serverul Web e.g., mod_cgi la Apache



http://httpd.apache.org/docs/trunk/mod/mod_cgi.html

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

performanta: solutii
Recurgerea la extensia FastCGI
www.fastcgi.com




pentru serverul Apache,
se poate utiliza modulul mod_fastcgi


avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

performanta: solutii
SCGI (Simple Common Gateway Interface)
http://www.python.ca/scgi/protocol.txt

alternativa la CGI, cu focalizare pe facilitarea exploatarii

implementari in Haskell, Java, Perl, Python, Ruby etc.

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

alternative
Folosirea altor interfete de programare Web
pe partea de server


exemplificari:
mod_perl / mod_python pentru Apache
ISAPI (Microsoft Internet Services API)

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

alternative
Folosirea altor interfete de programare Web
pe partea de server


recurgerea la servere de aplicatii Web reprezentative:
ASP.NET
JSP (Java Server Pages)
PHP
RoR (Ruby on Rails)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

rezumat



de la protocolul HTTP la
programare Web la nivel de server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

?

You might also like