Professional Documents
Culture Documents
Web02ProgramareWeb HTTP CGI
Web02ProgramareWeb HTTP CGI
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
?