Série de conférences ASP (12) Envoi de contenu au navigateur
Auteur:Eve Cole
Date de mise à jour:2009-05-30 19:59:00
Lors du traitement du script ASP, tout texte ou graphique qui n'est pas contenu dans les délimiteurs ASP ou les balises <SCRIPT> sera simplement renvoyé au navigateur. Le contenu peut être envoyé explicitement au navigateur à l’aide de l’objet Response.
Envoi de contenu Pour envoyer du contenu au navigateur à partir d'un délimiteur ou d'une procédure ASP, vous pouvez utiliser la méthode Write de l'objet Response. Par exemple, l'instruction suivante peut envoyer un message d'accueil différent selon que l'utilisateur a visité ou non cette page :
<%
Si FirstTime = Vrai Alors
Response.Write "<H3 ALIGN=CENTER>Bienvenue sur la page de présentation</H3>"
Autre
Response.Write "<H3 ALIGN=CENTER>Bienvenue sur la page de présentation</H3>"
Fin si
%>
En dehors de la procédure, vous n'avez pas besoin d'utiliser Response.Write pour renvoyer du contenu à l'utilisateur. Le contenu qui ne se trouve pas à l'intérieur d'un délimiteur de script est envoyé directement au navigateur, qui le formate et l'affiche. Par exemple, le processus de script suivant produit le même résultat que le script ci-dessus :
<H3 ALIGN=CENTRE>
<% Si première fois alors %>
Bienvenue sur la page de présentation.
<%Else%>
Bienvenue sur la page de présentation.
<% Fin Si %>
</H3>
Utilisez des commandes de script mixtes et HTML lorsque vous devez renvoyer la sortie une seule fois ou lorsqu'il est pratique d'ajouter des instructions au texte HTML existant. Utilisez Response.Write lorsque vous ne souhaitez pas séparer une instruction par des délimiteurs ou lorsque vous souhaitez créer une chaîne qui est renvoyée au navigateur. Par exemple, vous pouvez construire une chaîne de texte pour créer une ligne de tableau en utilisant les valeurs renvoyées par un tableau HTML :
Response.Write "<TR><TD>" & Request.Form("FirstName") _
& "</TD><TD>" & Request.Form("LastName") & "</TD></TR>"
Définition du type de contenu Lorsque le serveur Web renvoie le fichier au navigateur, il indique également au navigateur le type de contenu contenu dans le fichier. Cela permet au navigateur de décider s'il peut afficher le fichier lui-même ou s'il doit appeler une autre application. Par exemple, si le serveur réseau renvoie un tableau Microsoft Excel, le navigateur doit appeler une copie de Microsoft Excel pour afficher la page. Les serveurs Web identifient les types de fichiers en mappant l'extension du fichier à une table de types MIME.
Vous pouvez utiliser la propriété ContentType de l'objet Response pour définir la chaîne de type de contenu HTTP pour le contenu envoyé à l'utilisateur. Par exemple, la commande suivante définit le type de contenu pour une définition de canal :
<% Response.ContentType = "application/x-cdf" %>
Pour plus d'informations sur les canaux, consultez « Création de canaux dynamiques » dans cette rubrique.
Les autres types de contenu courants sont text/plain (pour le contenu renvoyé sous forme de texte plutôt que d'instructions HTML interprétées), text/gif (pour les images GIF) et video/quicktime (pour les films au format Apple QuickTime®). Un ensemble standard de types MIME a été défini et est pris en charge soit par un serveur Web, soit par un navigateur Web. Pour connaître les types de contenu pris en charge par votre serveur Web Microsoft, utilisez le Gestionnaire des services Internet pour ouvrir la page de propriétés de votre site Web, cliquez sur l'onglet En-têtes HTTP, puis sur l'onglet Types de fichiers.
Redirection du navigateur Utilisez la méthode Redirect pour rediriger le navigateur vers une autre URL au lieu d'envoyer le contenu à l'utilisateur. Par exemple, si vous souhaitez confirmer que les utilisateurs ont saisi votre application depuis la page d'accueil afin qu'ils puissent recevoir un identifiant client, vous pouvez vérifier s'ils disposent d'un numéro d'identification client, sinon vous pouvez les rediriger vers la page d'accueil ;
<%
Si Session("CustomerID") = 0 Alors
Réponse.Redirection "page d'accueil.asp"
Fin si
%>
À moins que le tampon ne soit déjà ouvert, vous devez rediriger le navigateur avant que du contenu ou des en-têtes ne soient renvoyés au navigateur. Placer l'instruction Response.Redirect en haut de la page et avant la balise <HTML> garantit qu'aucun contenu n'est renvoyé au navigateur. Si vous utilisez Response.Redirect après avoir renvoyé du contenu ou des en-têtes au navigateur, vous verrez un message d'erreur.
Si vous utilisez Response.Redirect au milieu de la page, utilisez-le avec la propriété Response.Buffer, comme expliqué dans la section suivante.
Contenu tamponné Par défaut, le serveur Web renvoie les résultats du traitement HTML et des scripts lors du traitement des pages ASP. Cependant, vous pouvez définir la propriété Buffer de l'objet Response pour qu'elle traite toutes les commandes de script serveur sur la page avant d'envoyer quoi que ce soit à l'utilisateur.
Vous pouvez utiliser des techniques de mise en mémoire tampon pour déterminer un point du processus de traitement de page auquel vous ne souhaitez pas envoyer de contenu avant ce point à l'utilisateur. Vous pouvez également utiliser la méthode Redirect de l'objet Response pour rediriger l'utilisateur vers une autre page, ou utiliser la méthode Clear de l'objet Response pour vider la mémoire tampon et envoyer un contenu différent à l'utilisateur. L'exemple ci-dessous utilise les deux méthodes.
<%
'Activez la mise en mémoire tampon. Cette instruction doit apparaître avant la balise <HTML>.
Réponse.Buffer = Vrai %>
<html>
<corps>
.
.
.
<%
Si Request("FName") = "" Alors
Réponse.Effacer
Réponse.Redirection "/samples/test.html"
Autre
Réponse.Write Request("FName")
Fin si
%>
</corps>
</html>
Vous pouvez également utiliser Response.Buffer pour empêcher le serveur Web de renvoyer les en-têtes HTTP avant que le script ne les modifie. Certaines propriétés et méthodes, telles que Response.Expires et Response.Redirect, modifient les en-têtes HTTP.
Lorsque la propriété Buffer est définie dans un script et que la méthode Flush n'est pas appelée, le serveur conservera les requêtes Keep-Alive émises par l'utilisateur. Développer cette habitude de script peut contribuer à améliorer les performances du serveur, car celui-ci n'a pas besoin de créer une nouvelle connexion pour chaque demande de l'utilisateur (en supposant que le serveur, l'utilisateur et tous les serveurs proxy prennent en charge les exigences Keep-Alive). Cependant, un inconvénient potentiel de cette approche est que le tampon n'affiche aucune réponse à l'utilisateur tant qu'il n'a pas traité tous les scripts du fichier ASP actuel. Pour les scripts plus longs et plus complexes, les utilisateurs peuvent être obligés d'attendre longtemps avant de voir cette page.
Par défaut, la mise en mémoire tampon est désactivée pour les applications ASP. Vous pouvez utiliser le Gestionnaire des services Internet pour activer les tampons pour l'ensemble de l'application ASP.
Permet aux serveurs proxy de mettre en cache les pages Grâce au serveur proxy, les applications peuvent envoyer des pages aux utilisateurs. Un serveur proxy demande des pages Web à un site Web au nom du navigateur de l'utilisateur. Les serveurs proxy mettent en cache les pages HTML afin que les requêtes répétées pour la même page puissent être renvoyées au navigateur rapidement et efficacement. Les serveurs proxy effectuent des requêtes, mettent en cache les pages Web et soulagent le réseau et les serveurs Web.
Bien que la mise en cache fonctionne bien pour les pages HTML, elle ne fonctionne pas bien pour les pages ASP contenant des informations générées dynamiquement. Par exemple, les rapports sur les conditions boursières ou les listes d'inventaire montrant de gros volumes d'affaires nécessitent des informations immédiates. Les informations d’il y a une heure sont très inexactes pour le moment. Si l'application renvoie des informations personnelles, par exemple une page d'accueil personnalisée, il est prévu que l'utilisateur ne puisse pas voir les informations personnelles d'un autre utilisateur.
Par défaut, le serveur ASP Command Proxy lui-même ne peut pas mettre en cache les pages ASP (bien qu'il mette en cache les images, les bitmaps, les petites applications et autres références sur les pages mises en cache). Vous pouvez utiliser la propriété Response.CacheControl pour définir le champ d'en-tête HTTP Cache Control afin d'autoriser la mise en cache d'une certaine page. La valeur par défaut de Response.CacheControl est la chaîne « Private », qui empêche les serveurs proxy de mettre en cache cette page. Pour autoriser la mise en cache, définissez le champ d'en-tête de contrôle du cache sur Public :
<% Response.CacheControl = "Public" %>
Étant donné que les en-têtes HTTP doivent être envoyés au navigateur ou au serveur proxy avant l'envoi du contenu de la page, vous pouvez définir la propriété Response.CacheControl ou utiliser un Response.Buffer pour mettre la page en cache avant toute balise HTML.
Le champ d'en-tête Cache Control fait partie de la spécification HTTP 1.1. Les pages ASP ne peuvent pas être mises en cache sur les serveurs proxy qui prennent uniquement en charge HTTP 1.0, car aucun champ d'en-tête expiré n'est envoyé.
Empêcher les navigateurs de mettre les pages en cache. Chaque version du navigateur a ses propres spécifications quant à la mise en cache des pages. Pour empêcher le navigateur de mettre en cache les pages ASP, utilisez Response.Expires pour définir l'en-tête d'expiration :
<% Réponse.Expire = 0 %>
Une valeur de 0 force les pages mises en cache à expirer. Étant donné que les en-têtes HTTP doivent être envoyés au navigateur avant l'envoi d'une page, la page peut être mise en cache en plaçant l'attribut Response.Expires avant la balise HTML ou en utilisant un Response.Buffer.
Créer des canaux dynamiques
Internet Explorer 4.0 dispose d'une nouvelle fonctionnalité que les planificateurs Web peuvent utiliser pour combiner des pages Web avec des thèmes communs dans un canal. Dans le navigateur, la chaîne est affichée sur la barre de titre de la chaîne ; les utilisateurs accèdent à la chaîne en cliquant sur l'icône. Les chaînes se mettent à jour automatiquement en arrière-plan ; les utilisateurs n'ont pas besoin de visiter le site pour télécharger les dernières pages dans leur navigateur. Les canaux offrent aux utilisateurs un chemin rapide et direct pour parcourir un ensemble de pages Web associées, et ces pages Web sont automatiquement mises à jour.
À l'aide d'ASP, vous pouvez écrire des scripts pour collecter les préférences de l'utilisateur, puis créer dynamiquement des canaux. Un fichier de définition de chaîne (.cdf) établit l'organisation et la séquence du contenu de la chaîne. Les commandes des fichiers .cdf utilisent la même syntaxe que le balisage HTML, ce qui les rend plus faciles à comprendre et à générer à partir de scripts. Lors de l'écriture d'un script ASP pour créer un fichier de définition de canal, le script utilise une extension .cdx. Lorsqu'ASP lit un fichier avec une extension .cdx, le type de contenu application/x-cdf est automatiquement envoyé, ce qui indique au navigateur d'utiliser la définition de canal pour interpréter les octets. Si vous n'utilisez pas .cdx comme extension, le script doit définir manuellement le type de contenu sur application/x-cdf à l'aide de Response.ContentType.
Voici un exemple d'utilisation des chaînes. Le formulaire HTML suivant demande à l'utilisateur de sélectionner une chaîne. Une fois soumis, le formulaire appelle un script dans le fichier .cdx pour créer la définition de canal.
<P> Choisissez les chaînes souhaitées </P>
<FORM METHOD="POST" ACTION="chan.cdx">
<P><INPUT TYPE=CHECKBOX NAME=Films> Films
<P><INPUT TYPE=CHECKBOX NAME=Sports> Sports
<P><INPUT TYPE="SUBMIT" VALUE="SUBMIT">
</FORM>
Le script dans Chan.cdx crée une définition de canal basée sur les valeurs de la table soumise avec la demande.
<% If Request.Form("Films") <> "" Then %>
<CANAL>
instructions de définition de chaîne pour les pages de film
</CANAL>
<% Fin Si %>
<% If Request.Form("Sports") <> "" Then %>
<CANAL>
déclarations de définition de chaîne pour les pages sportives
</CANAL>
<% Fin Si %>
Envoi de fichiers à un serveur Un navigateur peut utiliser l'application Posting Acceptor pour envoyer des fichiers à un serveur Web. Lorsque l'accepteur de publication télécharge des fichiers, il envoie des champs de formulaire codés en URL répertoriant le nom et l'emplacement de chaque fichier reçu. L'URL de traitement postal peut être ajoutée à un script qui télécharge le fichier pour appeler le script ASP afin de traiter ces noms de champs. Par exemple, vous pouvez écrire un script qui envoie automatiquement un e-mail à l'administrateur système avec le nom et l'emplacement du fichier.