Protocoles… http Courrier: smtp pop imap… servlets ftp DNS P2P 2: Application Layer HTTP, Php, servlets 2: Application Layer HTTP overview HTTP: hypertext transfer protocol Web’s.
Download ReportTranscript Protocoles… http Courrier: smtp pop imap… servlets ftp DNS P2P 2: Application Layer HTTP, Php, servlets 2: Application Layer HTTP overview HTTP: hypertext transfer protocol Web’s.
Protocoles…
http Courrier: smtp pop imap… servlets ftp DNS P2P 2: Application Layer 1
HTTP, Php, servlets
2: Application Layer 2
HTTP overview
HTTP: hypertext transfer protocol Web’s application layer protocol client/server model
client:
browser that requests, receives, “displays” Web objects
server:
Web server sends objects in response to requests HTTP 1.0: RFC 1945 HTTP 1.1: RFC 2068 PC running Explorer Mac running Navigator Server running Apache Web server 2: Application Layer 3
HTTP overview (continued)
Uses TCP: client initiates TCP connection (creates socket) to server, port 80 server accepts TCP connection from client HTTP messages (application layer protocol messages) exchanged between browser (HTTP client) and Web server (HTTP server) TCP connection closed HTTP is “stateless” server maintains no information about past client requests Protocols that maintain “state” are complex!
aside past history (state) must be maintained if server/client crashes, their views of “state” may be inconsistent, must be reconciled 2: Application Layer 4
HTTP connections
Nonpersistent HTTP At most one object is sent over a TCP connection.
HTTP/1.0 uses nonpersistent HTTP Persistent HTTP Multiple objects can be sent over single TCP connection between client and server.
HTTP/1.1 uses persistent connections in default mode 2: Application Layer 5
Nonpersistent HTTP
Suppose user enters URL www.someSchool.edu/someDepartment/home.index
(contains text, references to 10 jpeg images) 1a .
HTTP client initiates TCP connection to HTTP server (process) at www.someSchool.edu on port 80 1b.
HTTP server at host www.someSchool.edu client waiting for TCP connection at port 80. “accepts” connection, notifying 2.
HTTP client sends HTTP
request message
(containing URL) into TCP connection socket. Message indicates that client wants object someDepartment/home.index
3.
HTTP server receives request message, forms
message response
containing requested object, and sends message into its socket time 2: Application Layer 6
Nonpersistent HTTP (cont.)
time 5 .
HTTP client receives response message containing html file, displays html. Parsing html file, finds 10 referenced jpeg objects 6.
Steps 1-5 repeated for each of 10 jpeg objects 4.
HTTP server closes TCP connection. 2: Application Layer 7
Response time modeling
Definition of RRT: server and back.
Response time: time to send a small packet to travel from client to one RTT to initiate TCP connection one RTT for HTTP request and first few bytes of HTTP response to return file transmission time total = 2RTT+transmit time initiate TCP connection RTT request file RTT file received time time time to transmit file 2: Application Layer 8
Persistent HTTP
Nonpersistent HTTP issues: requires 2 RTTs per object OS overhead for each TCP connection browsers often open parallel TCP connections to fetch referenced objects Persistent HTTP server leaves connection open after sending response subsequent HTTP messages between same client/server sent over open connection Persistent without pipelining: client issues new request only when previous response has been received one RTT for each referenced object Persistent with pipelining: default in HTTP/1.1
client sends requests as soon as it encounters a referenced object as little as one RTT for all the referenced objects 2: Application Layer 9
HTTP request message
two types of HTTP messages: request, response HTTP request message: ASCII (human-readable format) request line (GET, POST, HEAD commands) header lines
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu User-agent: Mozilla/4.0
Connection: close Accept-language:fr
Carriage return, line feed indicates end of message (extra carriage return, line feed) 2: Application Layer 10
HTTP request message: general format
2: Application Layer 11
Uploading form input
Post method: Web page often includes form input Input is uploaded to server in entity body URL method: Uses GET method Input is uploaded in URL field of request line: www.somesite.com/animalsearch?monkeys&banana 2: Application Layer 12
Method types
HTTP/1.0
GET POST HEAD asks server to leave requested object out of response HTTP/1.1
GET, POST, HEAD PUT uploads file in entity body to path specified in URL field DELETE deletes file specified in the URL field 2: Application Layer 13
Exemple POST
POST /path/script.cgi HTTP/1.0 From: [email protected] User-Agent: HTTPTool/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 32 home=Cosby&favorite+flavor=flies 2: Application Layer 14
POST
dans une requête POST il n'y a pas qu'un entête: les données sont dans le corps du message les données définissent des variables qui seront utilisées par le CGI l'url requise est normalement un programme la réponse HTTP est normalement la sortie d'un programme 2: Application Layer 15
HTTP response message
status line (protocol status code status phrase) header lines
HTTP/1.1 200 OK Connection close Date: Thu, 06 Aug 1998 12:00:15 GMT Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998 …... Content-Length: 6821 Content-Type: text/html
data, e.g., requested HTML file
data data data data data ...
2: Application Layer 16
HTTP response status codes
In first line in server->client response message.
A few sample codes:
200 OK
request succeeded, requested object later in this message
301 Moved Permanently
requested object moved, new location specified later in this message (Location:)
400 Bad Request
request message not understood by server
404 Not Found
requested document not found on this server
505 HTTP Version Not Supported
2: Application Layer 17
Trying out HTTP (client side) for yourself
1. Telnet to your favorite Web server:
telnet cis.poly.edu 80
Opens TCP connection to port 80 (default HTTP server port) at cis.poly.edu.
Anything typed in sent to port 80 at cis.poly.edu
2. Type in a GET HTTP request:
GET /~ross/ HTTP/1.1
Host: cis.poly.edu
By typing this in (hit carriage return twice), you send this minimal (but complete) GET request to HTTP server 3. Look at response message sent by HTTP server!
2: Application Layer 18
Méthodes http
GET HEAD POST Cette méthode doit être utilisée lorsqu'une requête modifie la ressource. OPTIONS CONNECT Cette méthode permet d'utiliser un proxy comme un tunnel de communication. TRACE PUT DELETE Cette méthode permet d'ajouter une ressource sur le serveur. Cette méthode permet de supprimer une ressource du serveur. 2: Application Layer 19
entêtes
Host Permet de préciser le site Web virtual host, hôte virtuel basé sur le nom). (Obligatoire) Referer Indique l' URI webmasters User-Agent Connection connection persistante ou non Accept ou d'un robot d'indexation . navigateur Accept-Charset Accept-Language Spécifie les encodages de caractères acceptés. Spécifie les langages acceptés. 2: Application Layer 20
Réponses
Date Moment auquel le message est généré. Server Indique quel modèle de serveur HTTP Content-Length Indique la taille en octets Content-Type répond à la requête. de la ressource. de la ressource. Indique le type MIME Expires Indique le moment après lequel la ressource devrait être considérée obsolète ; permet aux navigateurs Web de déterminer jusqu'à quand garder la ressource en mémoire cache . Last-Modified Indique la date de dernière modification de la ressource demandée. 2: Application Layer 21
Let’s look at HTTP in action
telnet example Ethereal example 2: Application Layer 22
CGI
Common Gateway Interface exécuter du code du côté serveur Passage de paramètre par la méthode POST ou la méthode GET Variables d'environnement 2: Application Layer 23
Exemple
en shell: date.cgi
#!/bin/sh tmp=`/bin/date` !
cat << ! Content-type: text/html
La date courante sur le serveur est
$tmpAvec un formulaire:
Répondez aux questions suivantes
2: Application Layer 25Résultat
par la méthode get codage des paramètres: prenom=Hugues&nom=Fauconnier&age= 41+%E0+60+ans le navigateur génère l'url: http://www.monsite.com/cgi bin/treat.pl?prenom=Hugues&nom=Fauconnier&age=41+ %E0+60+ans Avec la méthode POST http://www.monsite.com/cgi-bin/treat.pl
prenom=Hugues&nom=Fauconnier&age=41 2: Application Layer 26
Traitement en perl
fichier perl 2: Application Layer 27
Paramètres
Les paramètres sont accessibles par l'intermédiaire de la variable d'environnement QUERY_STRING 2: Application Layer 28
Variables d'environnement
SERVER_SOFTWARE Le nom et la version du serveur HTTP répondant à la requête. (Format : nom/version) SERVER_NAME Le nom d'hôte, alias DNS ou adresse IP du serveur. GATEWAY_INTERFACE La révision de la spécification CGI que le serveur utilise. (Format : CGI/révision) 2: Application Layer 29
Variables…
SERVER_PROTOCOL Le nom et la révision du protocole dans lequel la requête a été faite (Format : protocole/révision) SERVER_PORT Le numéro de port sur lequel la requête a été envoyée. REQUEST_METHOD La méthode utilisée pour faire la requête. Pour HTTP, elle contient généralement « GET » ou « POST ». PATH_INFO Le chemin supplémentaire du script tel que donné par le client. Par exemple, si le serveur héberge le script « /cgi bin/monscript.cgi » et que le client demande l'url « http://serveur.org/cgi-bin/monscript.cgi/marecherche », alors PATH_INFO contiendra « marecherche ». PATH_TRANSLATED Contient le chemin demandé par le client après que les conversions virtuel → physique aient été faites par le serveur. 2: Application Layer 30
Variables
SCRIPT_NAME Le chemin virtuel vers le script étant exécuté. Exemple : « /cgi bin/script.cgi » QUERY_STRING Contient tout ce qui suit le « ? » dans l'URL envoyée par le client. Toutes les variables provenant d'un formulaire envoyé avec la méthode « GET » sera contenue dans le QUERY_STRING sous la forme « var1=val1&var2=val2&... ». REMOTE_HOST Le nom d'hôte du client. Si le serveur ne possède pas cette information (par exemple, lorsque la résolution DNS inverse est désactivée), REMOTE_HOST sera vide. REMOTE_ADDR AUTH_TYPE L'adresse IP du client. Le type d'identification utilisé pour protéger le script (s’il est protégé et si le serveur supporte l'identification). 2: Application Layer 31
Variables
AUTH_TYPE Le type d'identification utilisé pour protéger le script (s’il est protégé et si le serveur supporte l'identification). REMOTE_USER Le nom d'utilisateur du client, si le script est protégé et si le serveur supporte l'identification. REMOTE_IDENT Nom d'utilisateur (distant) du client faisant la requête. Le devraient être utilisée à des fins de journaux seulement. CONTENT_TYPE Le type de contenu attaché à la requête, si des données sont attachées (comme lorsqu'un formulaire est envoyé avec la méthode « POST »). CONTENT_LENGTH La longueur du contenu envoyé par le client. 2: Application Layer 32
Variables
HTTP_ACCEPT • Les types de données MIME accepte de recevoir. que le client • Exemple : text/*, image/jpeg, image/png, image/*, */* HTTP_ACCEPT_LANGUAGE • Les langages dans lequel le client accepte de recevoir la réponse. • Exemple : fr_CA, fr HTTP_USER_AGENT • Le navigateur utilisé par le client. • Exemple : Mozilla/5.0 (compatible; Konqueror/3; Linux) 2: Application Layer 33
User-server state: cookies
Many major Web sites use cookies Four components: 1) cookie header line of HTTP response message 2) cookie header line in HTTP request message 3) cookie file kept on user’s host, managed by user’s browser 4) back-end database at Web site Example: Susan access Internet always from same PC She visits a specific e commerce site for first time When initial HTTP requests arrives at site, site creates a unique ID and creates an entry in backend database for ID 2: Application Layer 34
Cookies: keeping “state” (cont.)
Cookie file
ebay: 8734 client server usual http request msg usual http response +
Set-cookie: 1678
server creates ID 1678 for user
Cookie file
amazon: 1678 ebay: 8734 one week later:
Cookie file
amazon: 1678 ebay: 8734 usual http request msg
cookie: 1678
usual http response msg usual http request msg
cookie: 1678
usual http response msg cookie specific action cookie spectific action 2: Application Layer 35
Cookies (continued)
What cookies can bring: authorization shopping carts recommendations user session state (Web e-mail) aside Cookies and privacy: cookies permit sites to learn a lot about you you may supply name and e-mail to sites search engines use redirection & cookies to learn yet more advertising companies obtain info across sites 2: Application Layer 36
Web caches (proxy server)
Goal: satisfy client request without involving origin server user sets browser: Web accesses via cache browser sends all HTTP requests to cache object in cache: cache returns object else cache requests object from origin server, then returns object to client client Proxy server client origin server origin server 2: Application Layer 37
More about Web caching
Cache acts as both client and server Typically cache is installed by ISP (university, company, residential ISP) Why Web caching?
Reduce response time for client request.
Reduce traffic on an institution’s access link.
Internet dense with caches enables “poor” content providers to effectively deliver content (but so does P2P file sharing) 2: Application Layer 38
Caching example
Assumptions average object size = 100,000 bits avg. request rate from institution’s browsers to origin servers = 15/sec delay from institutional router to any origin server and back to router = 2 sec Consequences utilization on LAN = 15% utilization on access link = 100% total delay = Internet delay + access delay + LAN delay = 2 sec + minutes + milliseconds public Internet institutional network 1.5 Mbps access link 10 Mbps LAN origin servers institutional cache 2: Application Layer 39
Caching example (cont)
Possible solution increase bandwidth of access link to, say, 10 Mbps Consequences utilization on LAN = 15% utilization on access link = 15% Total delay = Internet delay + access delay + LAN delay = 2 sec + msecs + msecs often a costly upgrade public Internet institutional network 10 Mbps access link 10 Mbps LAN origin servers institutional cache 2: Application Layer 40
Caching example (cont)
Install cache suppose hit rate is .4
Consequence 40% requests will be satisfied almost immediately 60% requests satisfied by origin server utilization of access link reduced to 60%, resulting in negligible delays (say 10 msec) total avg delay = Internet delay = .6*(2.01) secs + milliseconds < 1.4 secs public Internet institutional network 1.5 Mbps access link origin servers 10 Mbps LAN institutional cache 2: Application Layer 41
Conditional GET
Goal: don’t send object if cache has up-to-date cached version cache: specify date of cached copy in HTTP request cache HTTP request msg
If-modified-since:
HTTP response
HTTP/1.0 304 Not Modified
server: response contains no object if cached copy is up to-date:
HTTP/1.0 304 Not Modified
HTTP request msg
If-modified-since:
HTTP response
HTTP/1.0 200 OK
server object not modified object modified 2: Application Layer 42
Electronic Mail
outgoing message queue user mailbox Three major components: user agents mail servers simple mail transfer protocol: SMTP mail server User Agent a.k.a. “mail reader” composing, editing, reading mail messages e.g., Eudora, Outlook, elm, Netscape Messenger outgoing, incoming messages stored on server SMTP mail server user agent user agent SMTP SMTP user agent mail server user agent user agent user agent 2: Application Layer 43
Electronic Mail: mail servers
Mail Servers mailbox contains incoming messages for user message queue of outgoing (to be sent) mail messages SMTP protocol servers to send email messages between mail client: sending mail server “server”: receiving mail server mail server user agent SMTP mail server SMTP user agent user agent mail server SMTP user agent user agent user agent 2: Application Layer 44
Electronic Mail: SMTP [RFC 2821]
uses TCP to reliably transfer email message from client to server, port 25 direct transfer: sending server to receiving server three phases of transfer handshaking (greeting) transfer of messages closure command/response interaction commands: ASCII text response: status code and phrase messages must be in 7-bit ASCII 2: Application Layer 45
Scenario: Alice sends message to Bob
1) Alice uses UA to compose message and “to” [email protected]
2) Alice’s UA sends message to her mail server; message placed in message queue 3) Client side of SMTP opens TCP connection with Bob’s mail server 4) SMTP client sends Alice’s message over the TCP connection 5) Bob’s mail server places the message in Bob’s mailbox 6) Bob invokes his user agent to read message 1 user agent 2 mail server 3 4 mail server 5 6 user agent 2: Application Layer 46
Sample SMTP interaction
S: 220 hamburger.edu C: HELO crepes.fr S: 250 Hello crepes.fr, pleased to meet you C: MAIL FROM:
2: Application Layer 47
Try SMTP interaction for yourself:
telnet servername 25
see 220 reply from server enter HELO, MAIL FROM, RCPT TO, DATA, QUIT commands above lets you send email without using email client (reader) 2: Application Layer 48
SMTP: final words
SMTP uses persistent connections SMTP requires message (header & body) to be in 7 bit ASCII SMTP server uses CRLF.CRLF
to determine end of message Comparison with HTTP: HTTP: pull SMTP: push both have ASCII command/response interaction, status codes HTTP: each object encapsulated in its own response msg SMTP: multiple objects sent in multipart msg 2: Application Layer 49
Mail message format
SMTP: protocol for exchanging email msgs RFC 822: standard for text message format: header lines, e.g., To: From: Subject:
different from SMTP
commands!
body the “message”, ASCII characters only header body blank line 2: Application Layer 50
Message format: multimedia extensions
MIME: multimedia mail extension, RFC 2045, 2056 additional lines in msg header declare MIME content type MIME version method used to encode data multimedia data type, subtype, parameter declaration encoded data
From: [email protected] To: [email protected] Subject: Picture of yummy crepe. MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: image/jpeg base64 encoded data ..... ......................... ......base64 encoded data
2: Application Layer 51
MIME
Multipurpose Internet Mail Extensions texte en caractères non US ASCII attachements messages en plusieurs parties défini dans l'entête du mail à l'origine pour le mail uniquement mais utilisé de plus en plus fréquemment (exemple HTTP) SMTP ne considère que des caractères ASCII 7 bits d'où la nécessité de codage décodage 2: Application Layer 52
MIME
Un message peut être en plusieurs parties (multipart) définies par l'entête "Content Type" exemple • Content-Type: text/plain L'entête d'un message peut contenir autre chose que du US ASCII (par exemple dans le champ SUBJECT: "=?charset?encoding?encoded text?=". Subject: =?utf-8?Q?=C2=A1Hola,_se=C3=B1or!?= (Subject: ¡Hola, señor!) 2: Application Layer 53
MIME
Exemple de multipart Message:
Content-type: multipart/mixed; boundary="frontier" MIME-version: 1.0
This is a multi-part message in MIME format.
--frontier Content-type: text/plain This is the body of the message.
--frontier Content-type: application/octet-stream Content-transfer-encoding: base64 PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5Pgo gICAgAVGhpcyBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZ S48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --frontier- 2: Application Layer 54
Mail access protocols
user agent SMTP SMTP access protocol user agent sender’s mail server receiver’s mail server SMTP: delivery/storage to receiver’s server Mail access protocol: retrieval from server POP: Post Office Protocol [RFC 1939] • authorization (agent <-->server) and download IMAP: Internet Mail Access Protocol [RFC 1730] • more features (more complex) • manipulation of stored msgs on server HTTP: Hotmail , Yahoo! Mail, etc.
2: Application Layer 55
POP3 protocol
authorization phase client commands:
user:
declare username
pass:
password server responses
+OK
-ERR
transaction phase, client:
list:
list message numbers
retr:
number retrieve message by
dele:
delete
quit S: +OK POP3 server ready C: user bob S: +OK C: pass hungry S: +OK user successfully logged on C: list S: 1 498 S: 2 912 S: . C: retr 1 S:
2: Application Layer 56
POP3 (more) and IMAP
More about POP3 Previous example uses “download and delete” mode.
Bob cannot re-read e mail if he changes client “Download-and-keep”: copies of messages on different clients POP3 is stateless across sessions IMAP Keep all messages in one place: the server Allows user to organize messages in folders IMAP keeps user state across sessions: names of folders and mappings between message IDs and folder name 2: Application Layer 57
DNS: Domain Name System
People: many identifiers: SSN, name, passport # Internet hosts, routers: IP address (32 bit) used for addressing datagrams “name”, e.g., ww.yahoo.com - used by humans Q: map between IP addresses and name ?
Domain Name System:
distributed database
implemented in hierarchy of many
name servers application-layer protocol
host, routers, name servers to communicate to
resolve
names (address/name translation) note: core Internet function, implemented as application-layer protocol complexity at network’s “edge” 2: Application Layer 58
Compléments Javascript
Code qui s'exécute du côté du client calcul local contrôle d'une zone de saisie affichage d'alerte fenêtres menus etc..
Balise :
le code...
2: Application Layer 59
Exemple: bonjour
Bonjour
2: Application Layer 60Un peu plus: minicalcul
HTML>
Calcul
Création d'une fenêtre avec JavaScript 2: Application Layer 61
Suite
2: Application Layer 62Fichiers js
ctrl.js calcul function ctrl() { if (isNaN(window.document.Simul.res.value )) { alert ("Valeur incorrecte : " + document.Simul.res.value + "?"); document.forms[0].res.focus(); } } function calcul() { v1=document.forms[0].arg1.value; v2=document.forms[0].arg2.value; document.forms[0].res.value = v2*v1 ; } 2: Application Layer 63
suite et fin
function afficheDoc() { fenetre.js
options = "width=300,height=200"; fenetre = window.open('','MU',options); } fenetre.document.open(); manuel = "
Compléments: php
php est un langage de script pour les serveurs webs de nombreuses fonctions permettent de traiter les requêtes http ici on est du côté du serveur… 2: Application Layer 65
Exemple simple
Exemple
le "; echo "Adresse IP client:".$_SERVER['REMOTE_ADDR']."
"; echo "Server: " . $_SERVER['SERVER_NAME']; ?> 2: Application Layer 66
Résultat
Exemple
le 8/11/2006 à 15:54:29 Client :Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1) Adresse IP client:127.0.0.1
Server: localhost 2: Application Layer 67
Reçu par le client
Exemple
le 8/11/2006 à 15:54:29 Client :Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)
Adresse IP client:127.0.0.1
Server: localhost 2: Application Layer 68
Php
On est ici côté serveur: les balises sont interprétées par le serveur (apache par exemple) et servent à générer la page html reçu par le client Mais surtout php permet d'accéder aux variables d'environnement d'utiliser de nombreuses fonctionsalités • sessions, paramètres etc.
Php sert souvent d'interface pour MySql serveur simple de bases de données 2: Application Layer 69
Php
pas de typage ni de déclaration des variables $v est remplacé par la valeur de v (et permet aussi l'affectation) echo "$v"; constantes define("PI", 3.1415); types des variables numériques • $i=1; • $v=3.14; chaînes de caractères (expressions régulières) • $nom="Hugues"; • ',",{} 2: Application Layer 70
php
tableaux indicés • $tab[0]="un"; • $tab=array("un","deux","trois"); associatifs • $m=array("un"=>"one", "deux"=>"two"); • $m["trois"]="three"; next() prev() key() current() do {echo "Clé=key($m).Valeur= current($m)"} while(next($mes)); foreach($m as $cle =>$val) {echo "Clé=$cle.Valeur=$val";} 2: Application Layer 71
Php
structures de contrôles if if else while do while for foreach • break, continue 2: Application Layer 72
fonctions
{ function Nom([$arg1, $arg2, ...]) corps } passage par valeur (et pas références &) exemples function Add($i,$j){ $somme= $i + $j; return $somme; } } function Add($i,$j,&$somme){ $somme= $i + $j; 2: Application Layer 73
divers
variables automatiques (locales) statiques (comme en C) globales classes et objets 2: Application Layer 74
Pour le serveur…
tableaux associatifs prédéfinis $_SERVER: environnement serveur • REQUEST_METHOD • QUERY_STRING • CONTENT_LENGTH • SERVER_NAME • PATH_INFO • HTTP_USER_AGENT • REMOTE_ADDR • REMOTE_HOST • REMOTE_USER • REMOTE_PASSWORD 2: Application Layer 75
Suite
Autres tableaux $_ENV : environnement système $_COOKIE $_GET $_POST $_FILES $_REQUEST (variables des 4 précédents $_SESSION $GLOBALS les variables globales du scritp 2: Application Layer 76
Cookies et php
// Est-ce que le Cookie existe ?
if (isSet($_COOKIE['compteur'])) { $message = "Vous êtes déjà venu {$_COOKIE['compteur']} fois " . "me rendre visite
\n"; } else // On incrémente le compteur $valeur = $_COOKIE['compteur'] + 1; { // Il faut créer le cookie avec la valeur 1 $message = "Bonjour, je vous envoie un cookie
\n"; $valeur = 1; } // Envoi du cookie SetCookie ("compteur", $valeur); ?> 2: Application Layer 77
Cookies et php (fin)
Un compteur d'accès au site avec cookie
2: Application Layer 78En utilisant les sessions
// La fonction session_start fait tout le travail session_start(); ?>
Un compteur d'accès au site avec Session
2: Application Layer 79Fin
if (!isSet($_SESSION['cp'])) { $_SESSION['cp']=1; echo "C'est la première fois, votre id est:".session_id()."
"; } else{ $_SESSION['cp']++; echo "C'est votre ".$_SESSION['cp']." n-ième connexion"; if($_SESSION['cp']>10){ echo "on vous a trop vu"."
"; session_destroy(); } } ?> 2: Application Layer 80
session
session_start() session_destroy() session_id() on peut associer des variables à la session par le tableau associatif $_SESSION elle sera accessible à chaque session_start() jusqu'au session_destroy() pour toute connexion qui fournit le session_id().
2: Application Layer 81
Servlets
Master d’inform atique
Hugues Fauconnier [email protected]
2: Application Layer 82
Contenu dynamique…
Un serveur transmet des pages html… Comment le rendre dynamique?
CGI et variantes Traiter des requêtes des clients: méthodes post et get: un requête un processus 2: Application Layer 83
Contenu dynamique
Perl/cgi indépendant de la plateforme Extensions du serveur exemple ASP 2: Application Layer 84
Contenu dynamique servlet
Servlet: utiliser la machine virtuelle java du serveur 2: Application Layer 85
Avec quoi utiliser les servlets?
Serveur tomcat (java) d’apache utilise les packages javax.servlet et javax.servlet.http peut s’utiliser avec un serveur apache De nombreux autres serveurs Plug-in sur des serveurs http://www.servlets.com
2: Application Layer 86
Servlets
Portabilité Puissance (java) Efficacité Sûreté (par l’intermédiaire de la jvm) Extensibilité et flexibilité: Produire du html directement ou transformer du xml Uitlisation des JavaServer Pages (script qui génère des servlets) 2: Application Layer 87
Servlet
Rappel: les requêtes des clients (essentiellement) par post ou get
Package javax.servlet classes et interfaces pour les servlets (indépendant du protocole) Package javax.servlet.http
2: Application Layer 88
Servlet et java
Pas de main() mais une méthode service() Version générique: Version http 2: Application Layer 89
Exemple idiot
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(""); out.println("
Et maintenant comment faire?
Avec Apache tomcat: Le code source de l’applet dans
server_root/webapps/ROOT/WEB-INF/classes
Compiler avec javax.servlet et javax.servlet.http dans le « classpath » (présents dans server_root/lib/servlet.jar ) Lancer le serveur tomcat (startup.sh dans server_root/bin) (le serveur écoute sur le port 8080 par défaut) Le client demande l’url: • http://localhost: 8080/servlet/HelloWorld 2: Application Layer 91
Et pour traiter des données
Une page:
server_root/webapps/ROOT.
url: http://server:8080/form.html http://server:8080/servlet/Hello?name=Jacques+Dupont 2: Application Layer 93
Traiter la réponse
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Hello extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) out.println(""); out.println("
"); throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); String name = req.getParameter("name"); out.println("Pour les autres requêtes
Pour POST public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req, res); } Et