Nous avons vu à plusieurs endroits comment ASP crée ou modifie les en-têtes HTTP envoyés au client en réponse aux requêtes de page. Il existe plusieurs propriétés et méthodes dans l'objet Response qui peuvent nous aider à le faire. Voici quelques méthodes d'en-tête :
· Contrôlez la mise en cache et l'expiration.
· Créez un statut et des en-têtes HTTP personnalisés.
· Spécifiez le type MIME ou le type de contenu.
· Ajoutez des balises PICS.
Chacun de ces aspects sera brièvement examiné ci-après. Vous pouvez vérifier les propriétés et les méthodes dont nous parlons en cliquant sur le nom de la propriété ou le nom de la méthode concerné sur la page d'accueil "Response Object" (show_response.asp).
1. Mise en cache et pages Web ASP « expirantes »
Les navigateurs des utilisateurs, ainsi que tout serveur proxy entre eux et le serveur, peuvent mettre en cache les pages HTML et Web créées avec ASP. Lorsque l'utilisateur demande ensuite la page, le navigateur envoie une requête de « dernière modification » au serveur (en utilisant un en-tête HTTP_IF_MODIFIED_SINCE contenant la date de la version mise en cache) pour demander si la page a été modifiée.
S'il n'a pas été modifié, le serveur doit répondre avec un code d'état et un message « 304 Not Modified » et le navigateur utilisera le contenu mis en cache sans en télécharger une copie sur le réseau. Si une version modifiée existe déjà, elle sera envoyée avec le code d'état et le message « 200 OK ».
1) Attribut Response.CacheContol
D'autres facteurs affecteront également ce processus de traitement. Cependant, tout serveur proxy situé sur la route réseau utilisée par la page Web (généralement situé côté client) peut être empêché de mettre en cache la page Web en définissant la propriété Response.CacheControl sur Private. Dans ASP 3.0, il s'agit de la valeur par défaut pour les pages Web ASP et il n'est pas nécessaire de la définir. Mais cela est particulièrement utile lorsqu’une page Web est spécifiquement personnalisée pour des visiteurs individuels. Cela empêche les autres utilisateurs du même réseau d'accéder à la même page. Lorsque la valeur de l'attribut CacheControl est définie sur Public, le serveur est autorisé à mettre en cache les pages Web. Notez que certains serveurs proxy peuvent se comporter différemment et ignorer ou contourner cet en-tête.
Dans IE4, il est possible de recevoir un faux message « Cette page a expiré » lorsque la mise en cache du serveur proxy est disponible. Nous avons fourni une page Web (expiretest_form.asp) qui peut être testée sur le réseau via votre propre serveur proxy pour vérifier l'impact de cet attribut. Cette page peut être affichée en cliquant sur le lien "Response. CacheControl" sur la page d'accueil "Response Object". Comme le montre la figure ci-dessous :
Lorsque cette page est soumise à la page Web expiretest_result.asp, la propriété Response.CacheControl peut être définie, puis la valeur et l'heure à laquelle le script est exécuté sont insérées dans la page Web :
<%
Si Request.Form("public") = "on" Alors la case "Cache-Control" a été cochée
Réponse.CacheControl = "Public"
Autre
Response.CacheControl = "Privé"
Fin si
%>
<HTML>
...
Cache-Control est : <B><% = Response.CacheControl %></B><P>
La valeur dans la zone de texte est : <B><% Response.Write Request.Form("textbox") %>
<%
Response.Write Right("0" & Heure (Maintenant),2) & ":" & Right("0" & Minute (Maintenant),_
& 2) & « : » & Droite (« 0 » & Seconde (Maintenant),2)
%></B>
En cliquant sur « Précédent » et « Suivant » sur le navigateur, vous pouvez voir si le code s'exécute automatiquement ou utilise une copie en cache.
2) Propriétés Response.Expires et Response.ExpiresAbsolute
Les deux propriétés qui contrôlent la durée de stockage des pages Web mises en cache sont les propriétés Expires et ExpriesAbsolute de l'objet Response. Response.Expires définit la durée, exprimée en minutes depuis la création, pendant laquelle une page doit rester valide avant d'être supprimée du cache. L'attribut ExpiresAbsolute définit une date et une heure absolues d'expiration.
Nous fournissons un exemple de page Web nommée addheaders_form.asp pour montrer comment utiliser ces attributs. Cliquez sur le lien des deux propriétés dans la page d'accueil de Response Object.
Dans la page résultante, vous pouvez ajouter vos propres en-têtes HTTP personnalisés et définir divers attributs des en-têtes HTTP qui affectent la réponse. Lorsque vous cliquez sur le bouton "Soumettre le contenu de la requête", la page show_headers.asp ajoute les en-têtes sélectionnés au flux de données renvoyé, puis affiche le code utilisé pour accomplir cela, affichant le temps d'exécution correspondant, qui peut être utilisé pour vérifier si la page was Le cache est toujours exécuté à nouveau.
Le code de la page Web show_headers.asp crée et ajoute des en-têtes HTTP. La procédure est la suivante :
<%.
'Écrivez les en-têtes HTTP avant toute autre sortie
Si Request.Form("expires") = "on" Alors _
Réponse.Expires = Request.Form("expires_value")
Si Request.Form("expiresabs") = "on" Alors _
Response.ExpiresAbsolute = Request.Form("expiresabs_value")
Si Request.Form("lastmod") = "on" Alors _
Response.AddHeader « LAST-MODIFIED », Cstr(Request.Form(« lastmod_value »))
Si Request.Form("pragma") = "on" Alors _
Response.AddHeader « PRAGMA », CStr(Request.Form(« pragma_value »))
Si Request.Form("refresh") = "on" Alors _
Response.AddHeader « REFRESH », CStr (Request.Form (« refresh_value »))
Si Request.Form("addheader") = "on" Et Len(Request.Form("addheader_name")) Alors _
Response.AddHeader CStr(Request.Form("addheader_name")), _
CStr(Request.Form("addheader_value"))
Si Request.Form("status") = "on" Alors _
Réponse.Status = Request.Form("status_value")
%>
<HTML>
...
...Afficher le code et le temps d'exécution
...
le reste montre simplement le code qui a été exécuté et quand il a été exécuté. Les lecteurs remarqueront l'en-tête personnalisé « PRAGMA » inclus dans la page Web (dont nous n'avons pas parlé jusqu'à présent). Certains (anciens) serveurs proxy utilisent cela pour indiquer si les disques Web doivent être mis en cache. Par défaut, les pages sont mises en cache à moins que l'en-tête HTTP "PRAGMA=NO-CACHE" ne soit reçu.
2. Créez des codes d'état et des en-têtes HTTP personnalisés
Vous pouvez utiliser la méthode AddHeader de l'objet Response que vous avez vu précédemment dans l'exemple de page Web pour créer vos propres codes d'état ou des en-têtes personnalisés que vous aimez. Cette méthode nécessite deux paramètres : le nom de l'en-tête HTTP ou une chaîne contenant sa valeur ou la valeur qui lui est attribuée. À titre d'exemple, le code suivant ajoute un en-tête REFRESH à la page :
Response.AddHeader "REFRESH", "60;URL=newpath/newpage.asp"
Ceci est équivalent à l'élément <META> côté client :
<META HTTP- EQUIV=" REFRESH", "60;URL=newpath/newpage.asp">
Autrement dit, vous pouvez également utiliser la méthode AddHeader avec l'attribut Status pour que le navigateur charge une nouvelle page :
Response.Status = "302 Object Moved "
Response.Addheader « Location », « newpath/newpage.asp »
Cela équivaut à utiliser la méthode Response.Redirect :
Response.Redirect « newpath/newpage.asp »
La propriété Response.Status peut être utilisée pour envoyer certains messages d'état requis, par exemple, ajoutez les lignes suivantes :
Response.Status= "401 Unauthorized"
Response.Addheader "WWW-Authenticate", "BASIC"
force le navigateur à afficher une boîte de dialogue nom d'utilisateur/mot de passe, puis à les renvoyer au serveur en utilisant l'authentification BASIC (qui sera couvert dans cet article (voir les méthodes de vérification plus loin dans la série).
3. Type MIME et type de contenu
Lorsque nous voulons envoyer une chaîne créée dynamiquement au navigateur et qu'ils n'indiquent pas directement le type de contenu lorsqu'ils sont fournis au navigateur, mais fournissent une extension indiquant s'il s'agit d'un fichier disque, Réponse . ContentType est très utile. Sauf indication contraire, toutes les pages Web créées par ASP utilisent par défaut "text/type". L'identifiant du type de contenu est le type MIME (MIME signifie Multi-Purpose Internet Multimedia Extension ou Multi-pupose Internet Mail Extension, généralement en fonction du contexte).
Par exemple, si l'annotation de données envoyée au client est une image créée en lisant des valeurs binaires à partir d'une base de données, vous devez ajouter l'en-tête CONTENT-TYPE approprié avant d'envoyer un contenu :
Response.ContentType = "image/jpeg"
Si vous créez une image à partir d'une base de données. Pour les fichiers XML, utilisez le type MIEM « text/xml » et si vous créez un fichier texte pouvant être affiché dans un éditeur de fichiers ou stocké sous forme de fichier disque sur le client, utilisez « text » ; /texte".
4. Ajout d'une balise PICS
La propriété Respnse.Pics ajoute simplement une balise PICS (Platform for Internet Content system) à la page de la même manière que la balise <META> habituelle :
QUOT = Chr(34)
StrPicsLabel = « (PICS-1.0 » & QUOT & « http://www.rsac.org/ratingsv01.html »_
& QUOT & « 1 génération de commentaire vrai » & QUOT _
& « Serveur RSACi Amérique du Nord » & QUOT & « pour « & QUOT _
& « http://votresite.com » & QUOT & « sur « & QUOT _
& « 1999.08.01T03:04-0500 » & QUOT & « r (n 0 s 0 v 2 l 3)) »
Response.Pics(strPicsLabel)
Ce code ajoute l'étiquette PICS suivante :
(PICS-1.0 « http://www.rsac.org/ratingsv01.html » 1 génération true comment « RSACi
Serveur Amérique du Nord » pour « http://votresite.com » sur « 1999.08.01T03:04-0500 »
r (n 0 s 0 v 2 l 3))
Pour obtenir plus d'informations sur PICS ou pour en savoir plus sur la manière de définir le contenu d'une page, veuillez effectuer une recherche sur le site http://www.rsac.org/ .
Définition des en-têtes dans Internet Service Manager
Dans la première partie de cette série d'articles, il a été expliqué comment définir les propriétés de chaque site Web et du répertoire IIS 5.0 dans l'application Internet Service Manage (plug-in MMC), qui définit l'utilisation de ce site ou les ressources de l'annuaire sont envoyées au client dans les en-têtes HTTP de toutes les requêtes, offrant une alternative à la définition de ces propriétés à l'aide du code de script ASP dans chaque page Web.
Faites un clic droit sur le site ou le répertoire Web et sélectionnez "Propriétés". Dans l'onglet "En-têtes HTTP" de sa boîte de dialogue, vous pouvez définir l'heure relative ou la date absolue de la période de validité du contenu de la page, définir des en-têtes personnalisés et créez des étiquettes de niveau de contenu PICS, les types de contenu peuvent également être définis via le mappage de type MIME.
Vous pouvez voir qu'un en-tête HTTP REFRESH personnalisé a été créé et appliqué à toutes les pages Web chargées à partir de ce répertoire. C'est-à-dire qu'il se recharge (actualise) automatiquement toutes les minutes (idéal pour afficher les derniers scores des matchs de baseball, mais charge trop lourde sur le serveur).
Pour ajouter des mappages de types de contenu personnalisés dans la zone « MIME Map », cliquez simplement sur le bouton « Types de fichiers » dans la boîte de dialogue principale « Propriétés » pour les ajouter à la liste.
Lorsque vous commencez à expérimenter les en-têtes HTTP, vous découvrirez rapidement que tous les navigateurs ne se comportent pas de la même manière et que de nombreux navigateurs répondent aux différents en-têtes HTTP de différentes manières, ce qui rend parfois extrêmement difficile l'établissement de manière fiable d'un principe généralement applicable.
2. Utiliser des certificats clients
Si vous configurez un site Web sécurisé ou un site avec une partie sécurisée de son contenu, vous pouvez installer un certificat de serveur numérique pour authentifier le serveur en permettant aux visiteurs d'utiliser les informations cryptées dans le certificat. À chaque demande de page adressée au site ou à l'annuaire, le serveur envoie une copie du certificat, que le navigateur peut examiner pour déterminer à qui il s'adresse.
De même, le serveur peut également être configuré pour exiger que les utilisateurs fournissent un certificat numérique valide lorsqu'ils accèdent au site Web. Ils peuvent obtenir ce certificat auprès de nombreuses sources, telles que Verisign ( http://www.verisign.com ) ou Thawte Consulting ( http://www.thawte.com ). Le lecteur verra les détails de ce processus au chapitre 25.
Ces situations utilisent toutes les valeurs de la collection ClientCertificate de l'objet Request. L'exemple de code de ce chapitre comprend une page qui montre comment les utilisateurs utilisent certaines des méthodes de ces valeurs de collection.
Cette page s'appelle showcert.asp, et tout ce qu'elle fait est de parcourir la collection ClientCertificate et d'afficher toutes les valeurs qu'elle contient. Cela peut être fait en utilisant le même code simple que vous avez toujours utilisé auparavant, la seule différence étant de créer un tableau HTML pour contenir les résultats et de les tronquer en groupes de 60 caractères.
<TABEL CELLPADDING=0 CELLSPACING=0>
<%
Pour chaque keyItem dans Request.ClientCertificate()
StrItemValue = Request.ClientCertificate(keyItem)
Si Len(strItemValue) > 90 Alors strItemValue = Left(strItemValue, 60) & « ..etc. »
Réponse.Écrivez « <TR><TD> » & keyItem & « = « & strItemValue & « </TD></TR> »
Suivant
%>
</TABLE>
Utilisation de la redirection de certificat client
Une fois que tous les visiteurs d'un site ou d'une partie d'un site sont invités à donner leur certificat client, les informations qu'il contient peuvent être utilisées pour créer les pages Web que nous créons pour cet utilisateur. Par exemple, vous pouvez utiliser l'entrée Organisation de leur certificat pour les rediriger automatiquement vers une partie spécifique du site et rediriger les autres visiteurs ailleurs :
If Request.ClientCertificate("SubjectO") = "Wrox Press Inc" Then
Response.Redirect "/wrox_staff/default.asp" 'Site du personnel de Wrox
Autre
Response.Redirect "/public/Default.asp" 'Site public normal
Fin Si
En conséquence, l'entrée Pays peut être utilisée pour rediriger le visiteur vers un site Web correspondant :
Sélectionnez Case Request.ClientCertificate("SubjectC")
Cas « Royaume-Uni » : Réponse.Redirection « http://uk_site.co.uk/ »
Cas « DE » : Réponse.Redirection « http://de_site.co.de/ »
Cas « FR » : Réponse.Redirection « http://fr_site.co.fr/ »
'... etc.
Autre cas : Response.Redirect « http://us_site.com/ »
Fin Sélectionner
3. Lecture et écriture de données binaires
Il existe deux méthodes qui fournissent un accès aux données binaires au flux de données HTTP envoyé du navigateur au serveur et au flux de données renvoyé du serveur au navigateur. La méthode Request.BinaryRead peut obtenir un paramètre qui spécifie le nombre d'octets à lire et renvoie un tableau de type variant contenant les octets obtenus à partir du segment POST demandé (tels que les données de la collection Form de l'ASP). Le programme suivant lit les 64 premiers octets de données :
varContent = Request.BinaryRead(64)
Si vous utilisez la méthode BinaryRead, vous ne pourrez plus accéder à la collection Request.Form d'ASP à l'avenir. De même, une fois que nous référençons la collection Request.Form de quelque manière que ce soit, nous ne pouvons pas utiliser la méthode BinaryRead.
Il est également possible d'écrire des données binaires dans le flux de réponse créé par ASP, à l'aide de la méthode BinaryWrite. Vous devez lui fournir un tableau de variantes des octets que vous souhaitez écrire sur le client :
Response.BinaryWrite(varContent)
Ces méthodes sont rarement utilisées, sauf si vous créez une source non HTML à partir d'une base de données. Un exemple d'utilisation consiste à lire les octets qui composent l'image depuis la base de données et à l'envoyer au client à l'aide de la méthode BinaryWrite.
4. Créez un message de journal personnalisé
Si le serveur est configuré pour enregistrer les requêtes dans un fichier texte au format de fichier journal étendu W3C, vous pouvez utiliser la méthode Response.AppendToLog pour ajouter une chaîne de message à la fin de l'entrée du fichier journal. Cette méthode est très utile si vous souhaitez stocker des valeurs ou des messages pour une page Web spécifique, ou lorsqu'une situation spécifique se produit dans le script.
Par exemple, grâce à l'application « ordre stationnaire » d'un intranet, vous pouvez enregistrer les numéros de service des employés qui dépassent un nombre précis d'entrées :
...
Si intItemCount > 25 Alors
Response.AppendToLog "Commande importante de '" & strDept & département.
Fin si
...
configuration de la journalisation étendue
Pour utiliser la méthode AppendToLog, le paramètre de journalisation W3C Extended Log File Format doit être activé. La méthode de configuration consiste à accéder à l'onglet Site Web dans la boîte de dialogue Propriétés, à cocher la case Activer la journalisation, à sélectionner Format de fichier journal étendu du W3C et à cliquer sur le bouton Propriétés, comme illustré dans la figure suivante :
Dans la boîte de dialogue Propriétés de journalisation étendue qui apparaît, vous pouvez sélectionner les entrées que vous souhaitez inclure dans le fichier journal. Assurez-vous que URI Stem est coché, sinon la méthode AppendToLog échouera.
Nous avons fourni un exemple de page simple qui tente d'écrire une entrée dans le fichier journal, qui peut être ouverte à partir du lien de la méthode AppendToLog dans la page d'accueil de l'objet de requête (show_request.asp). Tout ce que cette page fait est de créer une simple chaîne contenant la date et l'heure actuelles, puis d'exécuter la méthode AppendToLog :
strToAppend = "Page exécutée le" & Now
Response.AppendToLog strToAppend
Résumé
Cet article a commencé l'étude d'ASP 3.0 et nous avons également vu comment ASP 3.0 fonctionne avec Internet Informateion Server 5.0 pour fournir une méthode simple à utiliser et efficace pour créer des pages Web et des applications Web dynamiques. . Bien sûr, il reste encore quelques points à étudier. Ce chapitre vient d'apprendre les deux objets les plus fondamentaux intégrés à ASP.
Les deux objets les plus basiques sont les objets Request et Response, qui nous permettent d'accéder et d'utiliser des valeurs dans le cadre d'une session client/serveur, qui se produit chaque fois qu'un utilisateur demande et charge une page ou une ressource à partir d'un site Web, c'est-à-dire. que l'objet Request peut donner accès à tout le contenu demandé par l'utilisateur, tandis que l'objet Response permet la création et la modification de la réponse renvoyée par le serveur.
Ces objets exposent diverses parties de la session via des collections et des propriétés, et fournissent plusieurs méthodes pour récupérer et modifier des segments individuels. Si vous les considérez comme des outils permettant de décomposer la demande d'un utilisateur et de créer une réponse avec le contenu approprié, cela peut vous aider à comprendre ce qui se passe. Cela aidera également à comprendre comment les différentes méthodes affectent le client, le serveur et la page Web en cours de création.