Présentation de l'objet Response
Le rôle de l'objet
Response
est de permettre de créer la
réponse HTTP
qui va être envoyée au navigateur, c'est-à-dire la page Web demandée
par le client.
L'objet
Response
permet ainsi de manipuler l'ensemble des informations
à destination du navigateur du client, c'est-à-dire le corps de la réponse
mais également les statuts et en-têtes HTTP.
L'objet Response possède une seule collection et de nombreuses propriétés
et méthodes :
La majorité des propriétés et des méthodes de l'objet
Response correspondent à des champs de la
réponse HTTP
.
Pour envoyer du texte au navigateur dans un code ASP, il suffit d'utiliser la méthode
write
de l'objet
Response
, voici un exemple simple montrant comment utiliser cette méthode :
<%@ LANGUAGE="VBSCRIPT" %>
<TITLE>Exemple de script ASP</TITLE>
</HEAD>
<% Response.write("http://www.commentcamarche.net") %>
</BODY>
</HTML>
Ce script est totalement inutile dans la mesure où un simple fichier HTML pourrait
donner le même résultat. L'intérêt de cette méthode est de pouvoir
gérer des variables ainsi que des chaînes :
<%@ LANGUAGE="VBSCRIPT" %>
<TITLE>Exemple de script ASP</TITLE>
</HEAD>
For i=1 to 10
Response.write("Compte à rebours: " & 10 - i & "<br>")
</BODY>
</HTML>
Il existe une écriture simplifiée permettant d'envoyer du texte au navigateur, elle
consiste à faire précéder la chaîne à envoyer du caractère
=
:
<%@ LANGUAGE="VBSCRIPT" %>
<TITLE>Exemple de script ASP</TITLE>
</HEAD>
<% for i=1 to 10 %>
<% = "Compte à rebours: " & 10 - i & "<br>" %>
<% Next %>
</BODY>
</HTML>
La méthode
Write()
gère la conversion des données entrées
en paramètre en chaîne de caractères utilisant le jeu de caractères par
défaut du serveur. Pour envoyer des données binaires, il est possible d'utiliser
la méthode
BinaryWrite()
.
Tandis que la méthode
Response.Write
envoie au navigateur des données formatées
selon le jeu de caractères du serveur, la méthode
BinaryWrite
permet d'envoyer
au navigateur des données brutes (
binaires
). Sa syntaxe suit
le même schéma que la méthode
Response.Write
:
<% Response.BinaryWrite(DonneesBinaire) %>
A l'inverse, ASP fournit une méthode à l'objet
Request
permettant de
lire des données
binaires
, il s'agit de
Request.BinaryRead
.
Lors de chaque échange par
le protocole HTTP
entre votre navigateur et le serveur, des données
dites d'
en-têtes
contenant des informations non affichées sont transmises.
Les
en-têtes HTTP
permettent aussi d'effectuer des actions
sur le navigateur comme le transfert de
cookies
ou bien une redirection vers une autre page.
Ces en-têtes sont les premières informations envoyées au navigateur (pour une réponse)
ou au serveur (dans le cas d'une requête), elles se présentent sous la forme :
en-tête: valeur
La syntaxe doit être rigoureusement respectée, c'est-à-dire qu'aucun espace ne doit figurer entre le nom de l'en-tête et les deux points (:).
Un espace doit par contre figurer après celui-ci !
La méthode
Response.AddHeader
ASP fournit une méthode permettant d'envoyer très simplement des
en-têtes HTTP
au navigateur du client.
La syntaxe de cette méthode est la suivante :
<% Response.AddHeader Nom-en-tete-HTTP, Valeur-en-tete-HTTP %>
Etant donné que les en-têtes HTTP sont les premières informations envoyées, la méthode
AddHeader
doit être utilisée avant tout envoi de données HTML
au navigateur (le script qui la contient doit donc être placé avant la balise <HTML>
et avant toute méthode
Response.Write
ou équivalent).
Il est essentiel d'éviter l'utilisation du caractère « _ » dans le nom de l'en-tête HTTP,
car la collection
ServerVariables
de l'objet
Request
interprète les « _ » comme des « . ».
Voici quelques utilisations possibles de la fonction
AddHeader()
:
pour rediriger le navigateur vers une nouvelle page :
Response.Addheader "location", "http://www.commentcamarche.net/"
Pour envoyer au navigateur une image créée à la volée
(pour faire un compteur de statistiques ou bien un histogramme dynamique par exemple) :
Reponse.AddHeader "Content-Type", "image/gif"
Dans la plupart des cas (comme ceux décrits ci-dessus) il existe une méthode
de l'objet
Response
permettant d'envoyer spécifiquement l'en-tête désiré.
Ainsi il est conseillé d'utiliser la méthode
Response.Redirect
pour envoyer
l'en-ête
Location
.
L'objet Response, outre la possibilité qu'il offre d'envoyer une page Web au navigateur du client,
permet aussi d'envoyer des
cookies
à celui-ci,
c'est-à-dire de stocker des données dans un fichier du client sous la forme de
paires nom/valeur.
L'objet Response fournit la collection
cookies
pour effectuer les opérations
d'envoi de cookies au navigateur.
Le
protocole HTTP
permet de spécifier les valeurs
de cookies dans les en-têtes HTTP, l'envoi de cookies au navigateur dans la page ASP doit
donc se faire avant tout envoi dans le corps de la réponse.
Pour stocker une valeur dans un cookie appelé
CCMCookie
, il suffit d'utiliser
la commande suivante :
<%@ LANGUAGE="VBSCRIPT" %>
<% response.cookies("CCMCookie") = "Valeur" %>
Pour stocker plusieurs valeurs associées à des index
dans un cookie appelé
CCMCookie
, il suffit d'utiliser
la commande suivante :
<%@ LANGUAGE="VBSCRIPT" %>
<% response.cookies("CCMCookie")("Index1") = "Valeur1" %>
<% response.cookies("CCMCookie")("Index2") = "Valeur2" %>
<% response.cookies("CCMCookie")("Index3") = "Valeur3" %>
<% ... %>
En réalité, le cookie ainsi créé n'aura qu'une durée
limitée à celle de l'utilisation du navigateur, cela signifie qu'il sera
effacé à la fermeture de celui-ci. Pour y remédier, il suffit de définir
la propriété
expires
, qui définit la « date limite de péremption
du gâteau ».
<% response.cookies("CCMCookie").expires = #4/18/2000# %>
La collection
cookies
possède d'autres propriétés que
expires
:
domain
définit le nom du serveur pour lequel les valeurs du cookie sont accessibles
path
définit le chemin sur le serveur pour lequel les valeurs du cookie sont accessibles
secure
permet d'indiquer que le cookie ne peut être envoyé que lors d'une connexion
sécurisée (
SSL
,
S-HTTP
, etc.)
La méthode
Redirect
La méthode
Response.Redirect
permet de forcer la redirection de la page du navigateur vers
l'URL passée en paramètre. La syntaxe de la méthode
Response.Redirect
est la suivante :
<% response.redirect "URL" %>
Voici un exemple d'utilisation de cette méthode afin de faire rediriger le navigateur du client vers
CCM :
<% response.redirect "http://www.commentcamarche.net" %>
La méthode
AppendToLog
Le serveur Web sur lequel l'application fonctionne possède un ou plusieurs fichiers spécifiques
dans lesquels sont enregistrés certains événements. On appelle ce type de fichier
log
(en français
fichier journal
).
ASP fournit une méthode permettant d'ajouter une ligne dans le fichier journal. Cette méthode
s'utilise comme suit :
<% response.AppendToLog "chaîne à stocker dans le fichier journal" %>
La chaîne à stocker ne doit en aucun cas contenir de virgules, dans la mesure où
il s'agit d'un caractère utilisé par le serveur pour séparer les champs du fichier
journal !
La propriété
Buffer
La propriété
Buffer
de l'objet
Response
indique au serveur s'il
doit mettre en cache (mémoire tampon) ou non les données à envoyer
au navigateur. Autrement dit, il s'agit d'une propriété spécifiant si les données
sont envoyées au fur et à mesure de l'interprétation de la page ASP ou bien
si le résultat de cette interprétation est envoyé en une seule fois à la fin.
Cette propriété s'utilise de la manière suivante :
<% response.buffer = [TRUE | FALSE] %>
Lorsque la propriété
Buffer
est initialisée avec la valeur
TRUE
,
les données sont mises en mémoire tampon. Il s'agit de la valeur par défaut du serveur
Microsoft IIS 4.0
.
Lorsque la propriété
Buffer
est initialisée avec la valeur
FALSE
,
les données sont envoyées au client au fur et à mesure. Il s'agit de la valeur
par défaut du serveur
Microsoft IIS 5.0
.
La méthode
Response.Flush
permet de forcer l'envoi des données au navigateur lorsque
la propriété
Buffer
est activée (c'est-à-dire initialisée
avec la valeur
TRUE
). Sa syntaxe est la suivante :
<% response.flush %>
La méthode
Response.End
permet de mettre fin à l'interprétation du script
par le serveur (en cas d'erreur par exemple) et retourne au navigateur la réponse en cours
(les éléments de réponse qui suivent l'appel de la méthode
End
sont ignorés). Cette méthode s'utilise simplement de la manière suivante :
<% Response.End %>
Si la propriété
Buffer
est activée, l'appel de la méthode
End
enverra le contenu du tampon au navigateur (l'équivalent d'un appel à la méthode
Flush
)
et ignorera le reste du fichier !
Il est toutefois possible d'empêcher l'envoi de tout contenu au client en appelant préalablement
la méthode
Response.Clear
.
La méthode
Clear
L'appel de la méthode
Clear
permet de supprimer tout le contenu de la réponse mis
en mémoire tampon. Sa syntaxe est la suivante :
<% Response.Clear %>
Cette méthode supprime uniquement le corps de la réponse et non les en-têtes HTTP préalablement
envoyés !
La propriété
Expires
La plupart des navigateurs ont la possibilité de
mettre en mémoire cache
(le terme
cacher
est
parfois utilisé) les pages web, c'est-à-dire la capacité à stocker temporairement une page sur le
disque dur du client afin de pouvoir la restituer au plus vite si celle-ci est à nouveau demandée.
La propriété
Expires
de l'objet
Response
permet de préciser le temps (en minutes) au bout duquel
la page expire, c'est-à-dire le temps nécessaire pour que le navigateur du client estime
qu'elle est périmée et qu'il la recharge afin d'actualiser celle qui est dans le
cache
. Sa syntaxe
est la suivante :
<% Response.Expires = Nombre_de_minutes %>
Ainsi une valeur égale à zéro obligera le navigateur à recharger
la page à chaque nouvelle requête :
<% Response.Expires = 0 %>
Etant donné que la propriété
Expires
correspond à l'envoi de l'en-tête HTTP
du même nom et que les en-têtes HTTP sont les premières informations envoyées, la propriété
Expires
doit être utilisée avant tout envoi de données
au navigateur (le script qui la contient doit donc être placé avant toute balise <HTML>
et avant toute méthode
Response.Write
ou équivalent).
La propriété
ExpiresAbsolute
Tandis que la propriété
Expires
permet de préciser une durée d'expiration en minutes,
la propriété
ExpiresAbsolute
permet de fixer l'heure à laquelle la page sera considérée
comme expirée et devra être à nouveau chargée :
<% Response.ExpiresAbsolute = Date_d_expiration %>
Voici un exemple d'utilisation de la propriété
ExpiresAbsolute
<% Response.ExpiresAbsolute = #October 3, 2007 18:24:31# %>
Au même titre que la propriété
Expires
,
la propriété
ExpiresAbsolute
doit être utilisée avant tout envoi de données
au navigateur (le script qui la contient doit donc être placé avant toute balise <HTML>
et avant toute méthode
Response.Write
ou équivalent).
La propriété
ContentType
La propriété
ContentType
permet d'informer le client sur le type de contenu envoyé
par le serveur en lui faisant envoyer un en-tête HTTP (
Content-Type
) qui définit le type
de données (
Type MIME
) qu'il s'apprête à lui envoyer. Par défaut le
serveur envoie un en-tête contenant le type
text/HTML
correspondant à une page web (fichier
HTML
).
Voici la manière selon laquelle cette propriété doit être utilisée :
<% Response.ContentType = "type/MIME" %>
Dans l'exemple ci-dessus
type/MIME
représente le type de fichier que le serveur
s'apprête à retourner. Les valeurs possibles de ce champ sont normalisées par l'
IANA
.
Vous trouverez sur CCM la
liste des principaux types MIME
.
La propriété
Response.IsClientConnected
permet au serveur de savoir si le client
est toujours connecté, ou plus exactement s'il est encore en mesure de recevoir des données.
Cette propriété est notamment utile dans le cas où le serveur envoie
un volume de données important nécessitant que le client reste connecté pour télécharger
les données (par exemple téléchargement d'un gros fichier généré dynamiquement par
le serveur).
La valeur prise par cette propriété permet de savoir si le client est encore en ligne
ou non :
<% Response.IsClientConnected %>
Si la valeur est
TRUE
, le client est encore connecté. Dans le cas contraire
(valeur
FALSE
) le client n'est plus à même de recevoir des informations de la part du serveur.
La propriété
CacheControl
permet de spécifier si
la page peut être mise « en cache » ou non, c'est-à-dire si
des
serveurs proxy
peuvent ou non garder une copie
locale de la page pour des gains en rapidité.
La syntaxe de cette propriété est la suivante :
<% Response.CacheControl = "public" | "private" %>
Cette propriété peut prendre deux valeurs :
public
indique que la page peut être mise en cache
private
spécifie que la page ne doit pas être mise en cache
Il est possible de définir plus précisément la mise en cache
des pages grâce aux propriétés
Expires
et
ExpiresAbsolute
, définissant une date d'expiration
de la page, afin que le proxy ne garde pas en cache une page au-delà d'une certaine
limite.
Cette propriété permet de définir le jeu de caractères
Unicode
utilisé dans la page. Il crée
en fait un en-tête HTTP
Content-Type
définissant le jeu de caractères.
La syntaxe de cette propriété est la suivante :
<% Response.Charset = jeu_de_caracteres %>
Le jeu de caractères utilisé en Europe est généralement le
jeu
ISO-latin-1
noté
iso-8859-1
:
<% Response.Charset = "iso-8859-1" %>
La propriété
PICS
La propriété
PICS
(
Platform for Internet Content Selection
)
permet de définir une étiquette
PICS
(
standardisée par le W3C
)
sur la page afin de permettre d'en évaluer le contenu. Sa syntaxe est la suivante :
<% Response.PICS = chaine_PICS %>
Voici un exemple d'usage de la propriété
PICS
:
<% Response.PICS = "(PICS-1.1 ""http://www.gcf.org/v2.5""
labels on ""2003.03.16T11:34-0500""
exp ""2004.07.14T15:25-0000""
for ""http://www.commentcamarche.net/asp/aspintro.php3""
by ""Jean-François PILLOU""
ratings (suds 0.5 density 0 color/hue 1))"
Le code ci-dessus produira l'envoi de l'en-tête HTTP suivant :
PICS-Label: (PICS-1.1 "http://www.gcf.org/v2.5" labels
on "2003.03.16T11:34-0500"
exp "2004.07.14T15:25-0000"
for "http://www.commentcamarche.net/asp/aspintro.php3"
by "Jean-François PILLOU"
ratings (suds 0.5 density 0 color/hue 1))
Plus d'information
ASPfr.com
Discussions pertinentes trouvées dans le forum