Cours 6

Transcription

Cours 6
Cours 6 h)p, srcipt CGI, php Javascript Smtp, pop,imap, 6p HTTP request message
❒  two types of HTTP messages:
request, response
❒  HTTP request message:
  ASCII (human-readable format)
request line
(GET, POST,
HEAD commands)
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
User-agent: Mozilla/4.0
header Connection: close
lines Accept-language:fr
Carriage return,
line feed
indicates end
of message
H. Fauconnier
(extra carriage return, line feed)
M2-Internet
2
HTTP request message: general format
H. Fauconnier
M2-Internet
3
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
H. Fauconnier
M2-Internet
4
Method types
HTTP/1.0
❒  GET
❒  POST
❒  HEAD
 
asks server to leave
requested object out of
response
H. Fauconnier
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
M2-Internet
5
POST
❒  dans une requête POST 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
H. Fauconnier
M2-Internet
6
HTTP response message
status line
(protocol
status code
status phrase)
header
lines
data, e.g.,
requested
HTML file
H. Fauconnier
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 data data data data ...
M2-Internet
7
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
H. Fauconnier
M2-Internet
8
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!
H. Fauconnier
M2-Internet
9
Méthodes http
❒ 
GET
 
❒ 
HEAD
 
❒ 
❒ 
❒ 
❒ 
❒ 
❒ 
C'est la méthode la plus courante pour demander une ressource. Une requête GET
est sans effet sur la ressource, il doit être possible de répéter la requête sans
effet.
Cette méthode ne demande que des informations sur la ressource, sans demander
la ressource elle-même.
POST
 
Cette méthode doit être utilisée lorsqu'une requête modifie la ressource.
 
Cette méthode permet d'obtenir les options de communication d'une ressource ou
du serveur en général.
OPTIONS
CONNECT
 
Cette méthode permet d'utiliser un proxy comme un tunnel de communication.
 
Cette méthode demande au serveur de retourner ce qu'il a reçu, dans le but de
tester et effectuer un diagnostic sur la connexion.
TRACE
PUT
 
Cette méthode permet d'ajouter une ressource sur le serveur.
 
Cette méthode permet de supprimer une ressource du serveur.
DELETE
H. Fauconnier
M2-Internet
10
entêtes
❒ 
Host
 
❒ 
Referer
 
❒ 
❒ 
❒ 
❒ 
Indique l'URI du document qui a donné un lien sur la ressource demandée. Cet entête permet aux webmasters d'observer d'où viennent les visiteurs.
User-Agent
 
❒ 
Permet de préciser le site Web concerné par la requête, ce qui est nécessaire
pour un serveur hébergeant plusieurs sites à la même adresse IP (name based
virtual host, hôte virtuel basé sur le nom). (Obligatoire)
Indique le logiciel utilisé pour se connecter. Il s'agit généralement d'un navigateur
Web ou d'un robot d'indexation.
Connection
 
connection persistante ou non
 
Cet en-tête liste les types MIME de contenu acceptés par le client. Le caractère
étoile * peut servir à spécifier tous les types / sous-types.
Accept
Accept-Charset
 
Spécifie les encodages de caractères acceptés.
 
Spécifie les langues acceptés.
Accept-Language
H. Fauconnier
M2-Internet
11
Réponses
❒  Date
 
Moment auquel le message est généré.
 
Indique quel modèle de serveur HTTP répond à la requête.
 
Indique la taille en octets de la ressource.
 
Indique le type MIME de la ressource.
❒  Server
❒  Content-Length
❒  Content-Type
❒  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.
H. Fauconnier
M2-Internet
12
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
H. Fauconnier
Example:
 
 
 
Susan access Internet
always from same PC
She visits a specific ecommerce 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
M2-Internet
13
Cookies: keeping “state” (cont.)
client
Cookie file
ebay: 8734
Cookie file
amazon: 1678
ebay: 8734
server
usual http request msg
usual http response +
Set-cookie: 1678
usual http request msg
cookie: 1678
usual http response msg
server
creates ID
1678 for user
cookiespecific
action
one week later:
Cookie file
amazon: 1678
ebay: 8734
H. Fauconnier
usual http request msg
cookie: 1678
usual http response msg
cookiespectific
action
M2-Internet
14
Cookies (continued)
What cookies can bring:
❒  authorization
❒  shopping carts
❒  recommendations
❒  user session state
(Web e-mail)
H. Fauconnier
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
M2-Internet
15
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
origin
server
Proxy
server
client
client
H. Fauconnier
origin
server
M2-Internet
16
More about Web caching
❒  Cache acts as both client
and server
❒  Typically cache is installed
by ISP (university,
company, residential ISP)
H. Fauconnier
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)
M2-Internet
17
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
origin
servers
public
Internet
1.5 Mbps
access link
institutional
network
10 Mbps LAN
❒  utilization on LAN = 15%
❒  utilization on access link = 100%
❒  total delay
= Internet delay +
access delay + LAN delay
= 2 sec + minutes + milliseconds
institutional
cache
H. Fauconnier
M2-Internet
18
Caching example (cont)
Possible solution
❒  increase bandwidth of access
link to, say, 10 Mbps
Consequences
origin
servers
public
Internet
❒  utilization on LAN = 15%
❒  utilization on access link = 15%
= Internet delay +
access delay + LAN delay
= 2 sec + msecs + msecs
❒  often a costly upgrade
10 Mbps
access link
❒  Total delay
institutional
network
10 Mbps LAN
institutional
cache
H. Fauconnier
M2-Internet
19
Caching example (cont)
origin
servers
Install cache
❒  suppose hit rate is .4
Consequence
public
Internet
❒  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 + access delay + LAN
delay = .6*(2.01) secs +
milliseconds < 1.4 secs
H. Fauconnier
1.5 Mbps
access link
institutional
network
10 Mbps LAN
institutional
cache
M2-Internet
20
Conditional GET
❒  Goal: don’t send object if
cache has up-to-date cached
version
❒  cache: specify date of
cached copy in HTTP request
If-modified-since:
<date>
❒  server: response contains no
object if cached copy is upto-date:
HTTP/1.0 304 Not
Modified
server
cache
HTTP request msg
If-modified-since:
<date>
HTTP response
object
not
modified
HTTP/1.0
304 Not Modified
HTTP request msg
If-modified-since:
<date>
object
modified
HTTP response
HTTP/1.0 200 OK
<data>
H. Fauconnier
M2-Internet
21
Préliminaire
❒  http est un protocole qui définit des
formats pour les interactions entre
serveurs et clients
❒  Du côté du client: les navigateurs
❒  Du côté serveur: des serveurs http
  Apache
(httpd), IIS (internet information
service) microsoft, Zeux etc…
  Mais aussi des serveurs d'application comme
glassfish ou tomcat
H. Fauconnier
M2-Internet
22
apache
❒  Pour pouvoir tester les exemples on
utilisera apache
  logiciel
libre disponible sur la plupart des
plateformes
  Le serveur le plus fréquent
  Prise en charge de nombreux modules, (perl php,
python, ruby…) cgi
  Serveurs virtuels
H. Fauconnier
M2-Internet
1-23
Principes…
❒  Le serveur reçoit des requêtes http et
renvoie des pages html dans des réponses
http
  Interpréter
les requêtes
  Lancer sur le côté serveur les applications
concernées
  Récupérer les résultats et les transmettre au
client
❒  Configuration: httpd.conf (en général
dans /etc (et par catalogue .htaccess)
H. Fauconnier
M2-Internet
1-24
Principes
❒  Correspondance entre url et fichiers locaux
  DocumentRoot:
•  Si DocumentRoot = /var/www/html
•  http://www.exemple.com/un/deux.html sera converti en
•  /var/www/html/un/deux.html
  Pages
des uitlisateurs
•  UserDir: www
•  http://www.example.com/~user/file.html sera
•  /home/user/public_html/file.html
  En
H. Fauconnier
plus des alias et des redirections
M2-Internet
1-25
Pour voir…
❒  Sur cette machine:
  /private/etc/apache2/httpd.conf
  ServerRoot:
/usr   DocumentRoot: /Library/WebServer/Documents
  + fichier de configurations dans « extra »
•  UserDir: Sites
H. Fauconnier
M2-Internet
1-26
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
H. Fauconnier
M2-Internet
27
Pour Apache
❒  Les executables cgi
 
 
 
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
Pour http://www.example.com/cgi-bin/test.pl
/usr/local/apache2/cgi-bin/test.pl sera exécuté
❒  "Paramètres"
  POST: transmis sur l'entrée standard (STDIN)
  GET: variable de l'environnement
QUERY_STRING
❒  STDOUT pour la réponse
  (au
moins un MIME type header
•  Content-type: text/html
H. Fauconnier
et deux newline)
M2-Internet
28
Exemple
❒  en shell: date.cgi
#!/bin/sh
tmp=`/bin/date`
echo "Content-type: text/html\n
<HTML><HEAD><TITLE>Script Cgi</TITLE></
HEAD><BODY>
<CENTER>
<H1>La date courante sur le serveur est</H1> $tmp
</CENTER> </BODY> </HTML>"
l'URL affichera la date
http://localhost/cgi-bin/date.cgi
H. Fauconnier
M2-Internet
29
Avec un formulaire:
<HTML><HEAD><TITLE>Formulaire simple</TITLE></HEAD>
<BODY>
<H2>Répondez aux questions suivantes</H2>
<FORM ACTION="http://www.monsite.com/cgi-bin/treat.pl"
METHOD=GET>
Prénom : <INPUT TYPE="text" NAME=prenom SIZE=20><BR>
Nom : <INPUT TYPE="text" NAME=nom SIZE=20><BR>
Age : <SELECT NAME=age>
<OPTION>- de 18 ans
<OPTION>19 à 40 ans
<OPTION>41 à 60 ans
<OPTION>+ de 60 ans
</SELECT><BR>
<INPUT TYPE=submit VALUE="Envoyer"> <INPUT TYPE=reset
VALUE="Remettre
à zéro">
</FORM>
</BODY>
http://localhost/~hf/formulaire.html
H. Fauconnier
M2-Internet
30
Ré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
H. Fauconnier
M2-Internet
31
Traitement en perl
❒  fichier perl
H. Fauconnier
M2-Internet
32
Paramètres
❒  Les paramètres sont accessibles par
l'intermédiaire de la variable
d'environnement QUERY_STRING
H. Fauconnier
M2-Internet
33
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)
H. Fauconnier
M2-Internet
34
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.
 
La méthode utilisée pour faire la requête. Pour HTTP, elle
contient généralement « GET » ou « POST ».
❒  REQUEST_METHOD
❒  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.
H. Fauconnier
M2-Internet
35
Variables
❒  SCRIPT_NAME
 
Le chemin virtuel vers le script étant exécuté. Exemple : « /cgibin/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
 
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).
❒  AUTH_TYPE
H. Fauconnier
M2-Internet
36
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
serveur doit supporter l'identification RFC 931. Cette variable
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.
H. Fauconnier
M2-Internet
37
Variables
❒  HTTP_ACCEPT
•  Les types de données MIME que le client
accepte de recevoir.
•  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)
H. Fauconnier
M2-Internet
38
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 :
<SCRIPT languge="JavaScript1.2">
le code...
</SCRIPT>
H. Fauconnier
M2-Internet
39
Exemple: bonjour
<HTML><HEAD>
<TITLE>Très facile</TITLE>
</HEAD>
<SCRIPT language="JavaScript1.2">
function bonjour()
{
alert ("Bonjour madame, bonjour monsieur");
}
</SCRIPT>
<BODY bgcolor="WHITE" onLoad="bonjour();">
<H1>Bonjour</H1>
</BODY></HTML>
http://localhost/~hf/BjrJvs.html
H. Fauconnier
M2-Internet
40
Un peu plus: minicalcul
<HTML>
<HEAD>
<TITLE>Petit calcul</TITLE>
</HEAD>
<BODY bgcolor='WHITE'>
<script language='JavaScript1.2' src='calcul.js'></script>
<script language='JavaScript1.2' src='fenetre.js'></script>
<script language='JavaScript1.2' src='ctrl.js'></script>
<CENTER><H1>Calcul</H1></CENTER>
Un petit exemple de formulaire.
<P>
Création d'une
<A href='#A' onClick='afficheDoc();'>fenêtre avec JavaScript</A>
H. Fauconnier
M2-Internet
41
Suite
<FORM ACTION='Simul.html' METHOD='POST' NAME='Simul'>
<CENTER>
<TABLE BORDER=3>
<TR><TD>Argument 1
<TD> <INPUT TYPE='TEXT' SIZE=20 NAME='arg1' onChange='calcul();'></TR>
<TR><TD>* Argument 2
<TD> <INPUT TYPE='TEXT' SIZE=20
NAME='arg2' onChange='calcul();'>
</TR>
<TR><TD>Résultat=
<TD> <INPUT TYPE='TEXT' SIZE=20
NAME='res' >
</TR>
</TABLE>
<INPUT TYPE='BUTTON' VALUE='Vérifier' onClick='ctrl();'>
<INPUT TYPE='RESET' VALUE='Effacer tout'
onClick=' if (!confirm("Vraiment vous voulez effacer ?")) exit;'>
</CENTER>
</FORM>
</BODY>
</HTML>
http://localhost/~hf/Simul.html
H. Fauconnier
M2-Internet
42
Fichiers 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 ;
}
H. Fauconnier
M2-Internet
43
suite et fin
❒  exemples/fenetre.js
function afficheDoc()
{
options = "width=300,height=200";
fenetre = window.open('','MU',options);
fenetre.document.open();
manuel = "<HTML><HEAD><TITLE>Documentation</TITLE></
HEAD>"
+ "<BODY bgcolor='white'>"
+ "Il n'y a pas besoin d'aide "
+ " c'est facile."
+ " Bonne chance !</BODY></HTML>";
fenetre.document.write(manuel);
fenetre.document.close();
}
H. Fauconnier
M2-Internet
44
Compléments: php
❒  php est un langage de script pour les
serveurs webs
❒  de nombreuses fonctions permettent de
traiter les requêtes http (en particulier
des requêtes concernant des bases de
données)
❒  ici on est du côté du serveur…
H. Fauconnier
M2-Internet
45
Exemple simple
<HTML> <HEAD>
<TITLE>Exemple très simple</TITLE>
</HEAD>
<BODY>
<H1>Exemple</H1>
le <?php echo Date ("j/m/Y à H:i:s"); ?>
<P>
<?php
echo "Client :" . $_SERVER['HTTP_USER_AGENT'] . "<BR>";
echo "Adresse IP client:".$_SERVER['REMOTE_ADDR']."<BR>";
echo "Server: " . $_SERVER['SERVER_NAME'];
?>
</BODY></HTML>
http://localhost/~hf/ExempleSimple.php
H. Fauconnier
M2-Internet
46
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
H. Fauconnier
M2-Internet
47
Reçu par le client
<HTML> <HEAD>
<TITLE>Exemple très simple</TITLE>
</HEAD>
<BODY>
<H1>Exemple</H1>
le 8/11/2006 à 15:54:29
<P>
Client :Mozilla/4.0 (compatible; MSIE 7.0; Windows NT
5.1; .NET CLR 1.1.4322; InfoPath.1)<BR>Adresse IP client:
127.0.0.1<BR>Server: localhost
</BODY></HTML>
H. Fauconnier
M2-Internet
48
Php
❒  On est ici côté serveur:
  les
balises <?php> <?> sont interprétées par le
serveur (apache par exemple) et servent à
générer la page html reçue par le client
❒  Mais surtout php permet
  d'accéder aux variables d'environnement
  d'utiliser de nombreuses fonctionnalités
•  sessions, paramètres etc.
❒  Php sert souvent d'interface pour MySql
serveur simple de bases de données
H. Fauconnier
M2-Internet
49
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";
•  ',",{}
H. Fauconnier
M2-Internet
50
php
❒  Variables
  Locales
(à une fonction)
  Globales
  Super globales (disponibles dans tout contexte)
  Static (garde sa valeur)
  Variables dynamiques (le nom de la variable est
une variable)
• 
• 
• 
• 
H. Fauconnier
$a='bonjour'
$$a='monde'
echo "$a ${$a}"
echo "$a $bonjour"
M2-Internet
51
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";}
H. Fauconnier
M2-Internet
52
php
❒  Mais aussi (php4 et php5)
  Programmation
• 
• 
• 
• 
orientée objets
Classes et Objets
Liaison dynamique
Constructeurs
…
  Exceptions
H. Fauconnier
M2-Internet
53
Php
❒  structures de contrôles
  if
  if
else
  while
  do while
  for
  foreach
•  break, continue
H. Fauconnier
M2-Internet
54
fonctions
function Nom([$arg1, $arg2, ...])
{
corps
}
passage par valeur (et par référence &)
exemples
function Add($i,$j){
$somme= $i + $j;
return $somme;
}
function Add($i,$j,&$somme){
$somme= $i + $j;
}
H. Fauconnier
M2-Internet
55
Pour le serveur…
❒  tableaux associatifs prédéfinis
  $_SERVER:
• 
• 
• 
• 
• 
• 
• 
• 
• 
• 
H. Fauconnier
environnement serveur
REQUEST_METHOD
QUERY_STRING
CONTENT_LENGTH
SERVER_NAME
PATH_INFO
HTTP_USER_AGENT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_PASSWORD
M2-Internet
56
Suite
❒  Autres tableaux
  $_ENV :
environnement système
  $_COOKIE
  $_GET
  $_POST
  $_FILES
  $_REQUEST (variables des 4 précédents)
  $_SESSION
  $GLOBALS les variables globales du script
H. Fauconnier
M2-Internet
57
Cookies et php
<?php
// Est-ce que le Cookie existe ?
if (isSet($_COOKIE['compteur']))
{
$message = "Vous êtes déjà venu {$_COOKIE['compteur']} fois "
. "me rendre visite<BR>\n";
// On incrémente le compteur
$valeur = $_COOKIE['compteur'] + 1;
}
else
{
// Il faut créer le cookie avec la valeur 1
$message = "Bonjour, je vous envoie un cookie<BR>\n";
$valeur = 1;
}
// Envoi du cookie
SetCookie ("compteur", $valeur);
?>
H. Fauconnier
M2-Internet
58
Cookies et php (fin)
<HTML><HEAD>
<TITLE>Les cookies</TITLE>
</HEAD>
<BODY>
<H1>Un compteur d'accès au site avec cookie</H1>
<?php echo $message; ?>
</BODY></HTML>
http://localhost/~hf/SetCookie.php
H. Fauconnier
M2-Internet
59
En utilisant les sessions
<?php
// La fonction session_start fait tout le travail
session_start();
?>
<HTML><HEAD>
<TITLE>Les cookies</TITLE>
</HEAD>
<BODY>
<H1>Un compteur d'accès au site avec Session</H1>
H. Fauconnier
M2-Internet
60
Fin
<?php
if (!isSet($_SESSION['cp']))
{
$_SESSION['cp']=1;
echo "C'estlapremière fois,votre id est:" .
session_id()."<BR>";
}
else{
$_SESSION['cp']++;
echo "C'est votre ".$_SESSION['cp']." n-ième connexion";
if($_SESSION['cp']>10){
echo "on vous a trop vu"."<BR>";
session_destroy();
}
}
?>
</BODY></HTML>
http://localhost/~hf/SessionPHP.php
H. Fauconnier
M2-Internet
61
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().
H. Fauconnier
M2-Internet
62
Chapter 2: Application layer
❒  2.1 Principles of
network applications
❒  2.2 Web and HTTP
❒  2.3 FTP
❒  2.4 Electronic Mail
 
❒  2.6 P2P applications
❒  2.7 Socket programming
with UDP
❒  2.8 Socket programming
with TCP
SMTP, POP3, IMAP
❒  2.5 DNS
H. Fauconnier
M2-Internet
63
FTP: the file transfer protocol
FTP
user
interface
FTP
client
user
at host
file transfer
local file
system
FTP
server
remote file
system
❒  transfer file to/from remote host
❒  client/server model
client: side that initiates transfer (either to/from
remote)
  server: remote host
❒  ftp: RFC 959
❒  ftp server: port 21
 
H. Fauconnier
M2-Internet
64
FTP: separate control, data connections
❒  FTP client contacts FTP server
❒ 
❒ 
❒ 
❒ 
TCP control connection
port 21
at port 21, TCP is transport
protocol
TCP data connection
FTP
FTP
port 20
client authorized over control
client
server
connection
client browses remote
❒  server opens another TCP data
directory by sending commands
connection to transfer another
over control connection.
file.
❒  control connection: “out of band”
when server receives file
❒  FTP server maintains “state”:
transfer command, server
current directory, earlier
opens 2nd TCP connection (for
authentication
file) to client
after transferring one file,
server closes data connection.
H. Fauconnier
M2-Internet
65
FTP commands, responses
Sample commands:
Sample return codes
❒  sent as ASCII text over
❒  status code and phrase (as
control channel
❒  USER username
❒  PASS password
❒  LIST return list of file in
❒ 
❒ 
current directory
❒  RETR filename retrieves
❒ 
❒  STOR filename stores
❒ 
(gets) file
(puts) file onto remote
host
H. Fauconnier
in HTTP)
331 Username OK,
password required
125 data connection
already open;
transfer starting
425 Can’t open data
connection
452 Error writing
file
M2-Internet
66
Chapter 2: Application layer
❒  2.1 Principles of
network applications
❒  2.2 Web and HTTP
❒  2.3 FTP
❒  2.4 Electronic Mail
 
❒  2.6 P2P applications
❒  2.7 Socket programming
with UDP
❒  2.8 Socket programming
with TCP
SMTP, POP3, IMAP
❒  2.5 DNS
H. Fauconnier
M2-Internet
67
Electronic Mail
outgoing
message queue
user mailbox
user
agent
Three major components:
❒  user agents
❒  mail servers
mail
server
❒  simple mail transfer
SMTP
protocol: SMTP
User Agent
❒  a.k.a. “mail reader”
❒  composing, editing, reading
mail messages
❒  e.g., Eudora, Outlook, elm,
Mozilla Thunderbird
❒  outgoing, incoming messages
stored on server
H. Fauconnier
user
agent
mail
server
user
agent
SMTP
SMTP
mail
server
user
agent
user
agent
user
agent
M2-Internet
68
Electronic Mail: mail servers
Mail Servers
❒  mailbox contains incoming
messages for user
❒  message queue of outgoing
(to be sent) mail messages
❒  SMTP protocol between mail
servers to send email
messages
  client: sending mail
server
  “server”: receiving mail
server
user
agent
mail
server
user
agent
SMTP
mail
server
SMTP
SMTP
mail
server
user
agent
user
agent
user
agent
user
agent
H. Fauconnier
M2-Internet
69
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
H. Fauconnier
M2-Internet
70
Scenario: Alice sends message to Bob
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) 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
1
user
agent
H. Fauconnier
2
mail
server
3
mail
server
4
5
6
user
agent
M2-Internet
71
Sample SMTP interaction
S:
C:
S:
C:
S:
C:
S:
C:
S:
C:
C:
C:
S:
C:
S:
220 hamburger.edu
HELO crepes.fr
250 Hello crepes.fr, pleased to meet you
MAIL FROM: <[email protected]>
250 [email protected]... Sender ok
RCPT TO: <[email protected]>
250 [email protected] ... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Do you like ketchup?
How about pickles?
.
250 Message accepted for delivery
QUIT
221 hamburger.edu closing connection
H. Fauconnier
M2-Internet
72
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)
H. Fauconnier
M2-Internet
73
SMTP: final words
❒  SMTP uses persistent
connections
❒  SMTP requires message
(header & body) to be in 7bit 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
H. Fauconnier
M2-Internet
74
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!
 
header
blank
line
body
❒  body
 
the “message”, ASCII
characters only
H. Fauconnier
M2-Internet
75
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
H. Fauconnier
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
M2-Internet
76
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
H. Fauconnier
M2-Internet
77
MIME
❒  Un message peut être en plusieurs parties
(multipart) définies par l'entête "ContentType"
  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!)
H. Fauconnier
M2-Internet
78
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
+CiAgPC9oZWFkPgogIDxib2R5PgogICAgAVGhpcyBpcyB0a
GUgYm9keSBvZiB0aGUgbWVzc2FnZS48L3A
+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier-H. Fauconnier
M2-Internet
79
Mail access protocols
SMTP
SMTP
user
agent
sender’s mail
server
access
protocol
user
agent
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: gmail, Hotmail, Yahoo! Mail, etc.
H. Fauconnier
M2-Internet
80
POP3 protocol
authorization phase
❒  client commands:
user: declare username
  pass: password
❒  server responses
  +OK
  -ERR
 
transaction phase, client:
❒  list: list message numbers
❒  retr: retrieve message by
number
❒  dele: delete
❒  quit
H. Fauconnier
S:
C:
S:
C:
S:
+OK POP3 server ready
user bob
+OK
pass hungry
+OK user successfully logged
C:
S:
S:
S:
C:
S:
S:
C:
C:
S:
S:
C:
C:
S:
list
1 498
2 912
.
retr 1
<message 1 contents>
.
dele 1
retr 2
<message 1 contents>
.
dele 2
quit
+OK POP3 server signing off
M2-Internet
on
81
POP3 (more) and IMAP
More about POP3
❒  Previous example uses
“download and delete”
mode.
❒  Bob cannot re-read email if he changes
client
❒  “Download-and-keep”:
copies of messages on
different clients
❒  POP3 is stateless
across sessions
H. Fauconnier
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
M2-Internet
82

Documents pareils