Lors de l'examen du contenu de l'objet Request, l'une des collections à étudier est la collection ServerVariables. Cet ensemble contient une combinaison de la valeur de l'en-tête HTTP envoyé du client au serveur avec la demande de page et de la valeur fournie par le serveur lui-même lorsqu'il reçoit la demande.
La valeur renvoyée par
la page « auto-référentielle »
dans la collection ServerVariables contient les détails du serveur Web et les informations de chemin de la page actuelle.Ces informations peuvent être utilisées partout où vous créez une page. Par exemple, pour créer une page « d'auto-référence » pouvant s'appeler à nouveau pour effectuer une autre tâche, nous pouvons utiliser le code suivant :
<FORM ACTION="<% = Request.ServerVariables("PATH_INFO") %>" METHOD= "POST ”>
Le même effet peut être obtenu avec la valeur HTTP “SCRIPT_NAME” :
<FORM ACTION="<% = Request.ServerVariables(“SCRIPT_NAME”) %>” METHOD="POST”>
Utilisez l'élément <A> pour ouvrez une autre page, vous pouvez utiliser :
...
<%
strFullPath = Request.ServerVariables("PATH_INFO")
'Supprimez le nom du fichier
strPathOnly = Gauche (strFullPath, InStrRev (strFullPath, "/"))
strNextPage = strPathOnly & « pages/next_page.asp »
%>
...
<A HREF=”<% = strNextPage %>”>Page suivante</A>
...
ces exemples fonctionnent même si le nom ou l'emplacement de la page d'origine change, car les informations de chemin de la page actuelle sont utilisées (bien sûr, le deuxième exemple échoue lorsque le nom de la page cible détachée change).
Autrement dit, si l'URL est automatiquement construite pour la sous-session du moteur de recherche, certaines valeurs de ServerVariable peuvent être collectées :
strFullURL = http:// & Request.ServerVariables("LOCAL_ADDR") _
& ":" & Request.ServerVariables("SERVER_PORT") _
& Request.ServerVariables("PATH_INFO")
Cela créera une URL complète incluant le numéro de port (dans ce cas, pas la valeur standard de 80). Par exemple, le résultat pourrait être :
http://194.74.60.254:1768/thispath/thispage.asp
Détection de la version du navigateur
Une autre valeur utile dans la collection ServerVariables est la chaîne de l'agent utilisateur du navigateur de l'utilisateur. Sur la page « Détection du type de navigateur » (browsertype.asp), la valeur « HTTP_USER_AGENT » dans la collection ServerVariables est utilisée pour obtenir la chaîne de l'agent utilisateur. Certains scripts sont utilisés pour analyser ces informations et rechercher le nom du fabricant et la version du navigateur.
<%
strUA = Requête.ServerVariables("HTTP_USER_AGENT")
Réponse.Écrivez « La chaîne de l'agent utilisateur est <B> » & strUA & « </B>
"
Si InStr(strUA, « MSIE ») Alors
Réponse.Écrivez « Pour mettre à jour votre navigateur, allez sur « _
& « <A HREF = » & Chr(34) & http://www.microsoft.com/ie/ »_
& Chr(34) & « > http://www.microsoft.com/ie/ <A>
"
intVersion = Cint(Mid(strUA, InStr(strUA, « MSIE ») + 5, 1))
Si intVersion >=4 Alors
Réponse.Écrivez « Vous pouvez utiliser Microsoft Dynamic HTML »
Fin si
Autre
Si InStr(strUA, « Mozilla ») Alors
Si InStr(strUA, « compatible ; ») = 0 Alors
Réponse.Écrivez « Votre navigateur est probablement Navigator. Vous pouvez « _.
& "téléchargez la dernière version de Navigator à partir de" _
& « <A HREF = » & Chr(34) & http://home.netscape.com/ »_
& "télécharger/"& Chr(34) & "> http://home.netscape.com "_
& « /télécharger/</A>
"
intVersion = Cint(Mid(strUA, InStr(strUA, «/») +1, 1))
Si intVersion >= 4 Alors
Réponse.Écrivez « Vous pouvez probablement utiliser Netscape Dynamic HTML »
Fin si
Autre
strVersion = Mid(strUA, InStr(strUA, « compatible ; ») + 12)
strProduct = Gauche (strVersion, InStr (strVersion, " "))
Réponse.Écrivez « Votre navigateur est compatible avec Navigator. Vous pouvez »_.
& « rechercher le fabricant à l'aide d'un moteur de recherche, tel que »_
& « <A HREF=" & Chr(34) _
& « http://www.altavista.digital.com/cgi-bin/query?q= »_
&strProduit_
& Chr(34) & « > http://www.altavista.com/ </A>
"
Fin si
Fin si
Fin si
%>
Les résultats de recherche pour IE 5.0 et Navigator 4.61 sont respectivement différents. Pour les navigateurs d'autres fabricants, vous pouvez obtenir un lien pour lancer automatiquement la recherche du nom du fabricant sur le site Web d'Alta Vista.
Notez que Netscape ne fournit pas le nom du fabricant dans la chaîne de l'agent utilisateur, il n'y a donc aucune garantie absolue qu'un navigateur soit Navigator.
Détection de la langue du navigateur
Une autre valeur utile dans la collection ServerVariables est "HTTP_ACCEPT_LANGUAGE", qui contient un code de langue spécifié lors de l'installation du navigateur ou codé en dur dans la version régionale de l'utilisateur. Des exemples de codes de langue sont en-us (Royaume-Uni, États-Unis), de-at (Allemagne, Australie) et es-pe (Espagne, Pérou).
Les codes de langue peuvent être génériques et omettre les identifiants de dialecte : par exemple, sur notre site Wrox, un grand nombre de visiteurs utilisent en (anglais) comme code de langue.
Par conséquent, le code de langue peut être détecté et une version appropriée spécifique à la région ou à la langue de la page est automatiquement chargée.
StrLocale = Lcase(Left(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"),2))
Sélectionnez le cas strLocale
Cas « en » : Response.Redirect « http://uk_site.co.uk/ »
Cas « de » : Response.Redirect « http://de_site.co.de/ »
Cas « fr » : Réponse.Redirection « http://fr_site.co.fr/ »
'...etc
Autre cas : Response.Redirect « http://us_sitel.com/ »
Fin Sélectionnez
ou redirigez la page en fonction d'un dialecte spécifique :
strLocale = Lcase(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"))
Sélectionnez le cas strLocale
Cas « en-gb » : Response.Redirect « http://uk_site.co.uk/ »
Cas « en-us » : Response.Redirect « http://us_site.com/ »
Cas « es-pe » : Response.Redirect « http://es_site2.co.pe/ »
'...
Autre cas : Response.Redirect « http://us_site1.com/ »
End Select
D'autres valeurs utiles de la collection ServerVariables
peuvent accéder et utiliser n'importe quel membre de la collection ServerVariables pour contrôler la manière dont la page ASP répond à une demande. Vous pouvez vérifier si un visiteur a accédé au site en utilisant le port par défaut 80 ou un autre. Dans cet exemple, recherchez l'accès via le port 443 - qui fournit un accès Secure Socket Layer (SSI) (et d'autres protocoles) - et redirigez-les vers une page appropriée.
Si Request.ServerVariables("SERVER_PORT") = "443") Alors
Response.Redirect "/securesite/default.asp" 'Utilisateur sécurisé
Autre
Response.Redirect «/normalsite/default.asp» 'Utilisateur non sécurisé
Fin Si
si le navigateur doit s'enregistrer et être vérifié par le serveur (plutôt que de lui permettre d'accéder de manière anonyme sous le compte IUSER du serveur Web, ce problème sera abordé en détail dans un chapitre ultérieur), le nom d'utilisateur peut être interrogé pour déterminer l'utilisateur qui traite avec nous. Qui est-il et s'il faut charger la page pour cet utilisateur. Par exemple, le code suivant affichera uniquement le lien d'administration pour les utilisateurs nommés Administrateur.
...
<A HREF=”dispcnfg.asp”>Changer la configuration d’affichage</A>
<A HREF=”dispcolr.asp”>Changer les couleurs d’affichage</A>
<A HREF=”keyboard.asp”>Changer la configuration du clavier</A >
<%
Si Request.ServerVariables("AUTH_USER") _
= Ucase(Request.ServerVariables("SERVER_NAME")) & "Administrator" Puis
%>
<A HREF=”allusers.asp”>Administrer tous les utilisateurs</A>
<A HREF=”usrlogon.asp”>Administrer les informations de connexion</A>
<%
Fin si
%>
...
notez qu'ASP ne remplit pas la collection ServerVariables tant que vous n'avez pas accédé à l'un de ses membres. Accéder à un membre de cette collection pour la première fois permettra à IIS d'obtenir la totalité de celui-ci, la collection ServerVariables ne doit être utilisée qu'en cas de besoin.
Autres techniques de requête et de réponse
Examinons maintenant quelques techniques utiles pour utiliser les objets Request et Response, notamment :
· La gestion des connexions, de la mise en mémoire tampon et des redirections de pages.
· Fonctionnement des en-têtes HTTP, de la mise en cache et des pages « expiration ».
· Utiliser les certificats clients.
· Créez des messages de fichier journal personnalisés.
1. Gestion des connexions, du buffering et des redirections de pages
Une fonctionnalité très utile d'ASP est de permettre aux utilisateurs de rediriger d'une page Web ASP vers une autre page Web (ASP ou HTML), ou vers un autre fichier source (comme un fichier ZIP ou du texte). déposer) ). C'est transparent pour l'utilisateur, c'est en fait le navigateur qui fait le travail. Lorsque vous utilisez la méthode Response.Redirect pour charger une nouvelle page Web, un en-tête HTTP spécial est en fait renvoyé au client. Cet en-tête est :
HTTP/1.1 302 Objet déplacé
Location /newpath/newpage.asp
Le navigateur lit ces informations d'en-tête et charge la page comme indiqué par la valeur Location. Cela revient fonctionnellement à utiliser la balise HTML <META> côté client dans une page Web, par exemple :
<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=/newpath/newpage.asp">
Cela apporte a Le problème est que le serveur proxy entre le serveur et l'utilisateur peut fournir son propre message contenant un lien vers la nouvelle page, plutôt que de charger directement la nouvelle page. Et les navigateurs peuvent faire le même travail selon le fabricant et la version. Cela supprime la prétendue transparence et rend l'accès à votre site plus fastidieux pour l'utilisateur car il continue de recevoir des messages d'erreur.
Après avoir envoyé un contenu de page tel que du texte ou du HTML, nous ne pouvons plus utiliser la méthode Redirect. Cependant, une façon qui semble limiter « l'impact sur le serveur proxy » consiste d'abord à s'assurer qu'aucune sortie (y compris les en-têtes HTTP) n'est envoyée au client. Dans ASP 2.0, vous devez activer la mise en mémoire tampon, puis utiliser la méthode Clear pour effacer la mémoire tampon :
Response.Buffer = True
'Quelques conditions pour sélectionner la page appropriée :
Si Request.ServerVariables("SERVER_PORT") = 1856 Alors
StrNewPage = « /newpath/this_page.asp »
Autre
StrNewPage = « /newpath/the_other_page.asp »
Fin si
Réponse.Effacer
Response.Redirect strNewPage
Dans ASP 3.0, la mise en mémoire tampon est activée par défaut, la première ligne peut donc être ignorée, mais elle est inoffensive et garantit que notre page Web fonctionnera toujours même dans un environnement ASP 2.0.
Plutôt que d'utiliser ce type de redirection d'en-tête HTTP, il est préférable d'utiliser une nouvelle fonctionnalité d'ASP 3.0, qui nous permet de convertir pour exécuter une autre page Web via la méthode Transfer de l'objet Serveur. Nous étudierons cette question plus en détail dans le futur. .
1) Tampon de page ASP
Comme vous l'avez vu, le tampon de page ASP 3.0 est activé par défaut dans IIS 5.0 et désactivé par défaut dans les versions antérieures. Microsoft nous indique que la mise en mémoire tampon permet une diffusion plus efficace des pages Web dans IIS 5.0, c'est pourquoi l'état par défaut de la mise en mémoire tampon a été modifié. Dans la plupart des cas, cela n’a aucun effet sur nous. Cependant, si vous avez une très grande page Web ou une page Web dont la création prend un certain temps à l'aide d'ASP ou d'autres codes et composants côté serveur, au fur et à mesure que ses parties sont terminées, nous pouvons les actualiser par lots pour le client :
.. .
... Code pour créer la première partie de la page
...
Réponse.Flush
...
... Code pour créer la partie suivante de la page
...
Réponse.Flush
...
parfois, vous souhaiterez peut-être arrêter l'exécution du code à un moment donné avant la fin de la page, en appelant la méthode End pour actualiser tout le contenu actuel pour le client et abandonner tout traitement ultérieur.
...
... Code pour créer la première partie de la page
Si strUserName = "" Alors Response.Clear
...
... Code pour créer une nouvelle version de cette partie de la page
...
Voici deux exemples de pages Web illustrant la mise en mémoire tampon et la redirection, qui peuvent être téléchargées à partir de la page principale « Objet de réponse » (sow_response.asp). Le premier exemple de page Web Response.Redirect est nommé redirect.asp. Il insère du contenu dans la page mise en mémoire tampon, efface la mémoire tampon et redirige vers une autre page Web :
For intLoop = 1 To 1000000.
Réponse.Écrivez "."
Suivant
Réponse.Effacer
Réponse.Redirect "show_redirect.asp"
Response.End
show_response.asp fait le même travail, mais la redirection revient à la page d'accueil « Objet de réponse ». Étant donné que ces pages sont mises en mémoire tampon et que toutes les sorties doivent être effacées avant la redirection, aucune sortie n'est visible dans le navigateur. Cependant, chaque redirection effectuée peut être vue en observant l'état du navigateur. Comme le montre la figure ci-dessous :
<img src=/u/info_img/2009-06/25/asp14.jpg>
Dans la page d'accueil "Response Object", cliquez sur le lien "Response.Flush" pour ouvrir le deuxième exemple de page Web. usebuffer.asp. Il parcourt simplement chaque caractère d'une chaîne et les envoie au client avec un certain délai. Bien qu'il s'agisse d'une utilisation très inefficace des serveurs Web et d'ASP, cela montre comment fonctionne la mise en mémoire tampon.
<img src=/u/info_img/2009-06/25/asp15.jpg>
Ce qui suit est le code ASP minimum requis. Notez que nous actualisons chaque caractère dans le navigateur séparément, car sinon il sera stocké dans le tampon jusqu'à ce que le la page Web est complète :
strText = "Ce texte a été envoyé au navigateur à l'aide de " & _
"<B>Réponse.Flush</B>
"
Pour intChar = 1 à Len (strText)
Pour intWrite = 1 à 100 000
Suivant
Réponse.Write Mid(strText,intChar,1)
Réponse.Flush
Suivant
2) Propriété Response.IsClientConnected
La propriété IsClientConnected existe déjà dans ASP 2.0, mais elle est quelque peu peu fiable. Certaines sorties doivent être envoyées au client avant qu'il ne renvoie un résultat précis. Ce problème a été résolu dans ASP 3.0. Cette propriété peut désormais être utilisée librement.
IsClientConnected est un moyen utile d'observer si l'utilisateur est toujours connecté au serveur et charge la page Web créée par ASP. Si l'utilisateur se déconnecte ou arrête le téléchargement, nous n'avons plus à gaspiller les ressources du serveur pour créer la page Web car le contenu du tampon sera supprimé par IIS. Par conséquent, pour les pages Web qui nécessitent beaucoup de temps pour calculer ou utilisent beaucoup de ressources, il convient de vérifier à chaque étape si le navigateur est hors ligne :
...
... Code pour créer la première partie de la page
...
Si Response.IsClientConnected alors
Réponse.Flush
Autre
Réponse.Fin
Fin si
...
... Code pour créer la partie suivante de la page...