Bei der Erörterung des Inhalts des Request-Objekts ist eine der zu untersuchenden Sammlungen die ServerVariables-Sammlung. Dieser Satz enthält eine Kombination aus dem Wert im HTTP-Header, der vom Client mit der Seitenanforderung an den Server gesendet wird, und dem Wert, der vom Server selbst bereitgestellt wird, wenn er die Anforderung empfängt.
Der vonder „selbstreferenziellen“ Seite
in der ServerVariables-Sammlungzurückgegebene Wert
enthält die Details des Webservers und die Pfadinformationen der aktuellen Seite.Diese Informationen können überall dort verwendet werden, wo Sie eine Seite erstellen. Um beispielsweise eine „Selbstreferenz“-Seite zu erstellen, die sich selbst erneut aufrufen kann, um eine andere Aufgabe abzuschließen, können wir den folgenden Code verwenden:
<FORM ACTION="<% = Request.ServerVariables("PATH_INFO") %>" METHOD= „POST“>
Der gleiche Effekt kann mit dem HTTP-Wert „SCRIPT_NAME“ erzielt werden:
<FORM ACTION="<% = Request.ServerVariables(“SCRIPT_NAME”) %>“ METHOD="POST">
Verwenden Sie das <A>-Element, um Öffnen Sie eine andere Seite. Sie können Folgendes verwenden:
...
<%
strFullPath = Request.ServerVariables("PATH_INFO")
„Entfernen Sie den Dateinamen.“
strPathOnly = Left(strFullPath, InStrRev(strFullPath, „/“))
strNextPage = strPathOnly & „pages/next_page.asp“
%>
...
<A HREF=“<% = strNextPage %>“>Nächste Seite</A>
...
diese Beispiele funktionieren auch dann, wenn sich der Name oder der Speicherort der Originalseite ändert, da die Pfadinformationen der aktuellen Seite verwendet werden (natürlich schlägt das zweite Beispiel fehl, wenn sich der Name der abgetrennten Zielseite ändert).
Mit anderen Worten: Wenn die URL automatisch für die Untersitzung der Suchmaschine erstellt wird, können einige Werte von ServerVariable erfasst werden:
strFullURL = http:// & Request.ServerVariables("LOCAL_ADDR") _
& ":" & Request.ServerVariables("SERVER_PORT") _
& Request.ServerVariables("PATH_INFO")
Dadurch wird eine vollständige URL inklusive der Portnummer erstellt (in diesem Fall nicht der Standardwert 80). Das Ergebnis könnte beispielsweise wie folgt lauten:
http://194.74.60.254:1768/thispath/thispage.asp
Erkennen der Browserversion
Ein weiterer nützlicher Wert in der ServerVariables-Sammlung ist die Benutzeragentenzeichenfolge des Browsers des Benutzers. Auf der Seite „Erkennen des Browsertyps“ (browsertype.asp) wird der Wert „HTTP_USER_AGENT“ in der ServerVariables-Sammlung verwendet, um die Benutzeragentenzeichenfolge abzurufen. Einige Skripte werden verwendet, um diese Informationen zu analysieren und den Herstellernamen und die Browserversion zu ermitteln.
<%
strUA = Request.ServerVariables("HTTP_USER_AGENT")
Response.Write „Die Zeichenfolge des Benutzeragenten ist <B>“ & strUA & „</B>.“
"
Wenn InStr(strUA, „MSIE“) Dann
Response.Write „Um Ihren Browser zu aktualisieren, gehen Sie zu „_“
& „<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))
Wenn intVersion >=4 Dann
Response.Write „Sie können Microsoft Dynamic HTML verwenden“
Ende wenn
Anders
Wenn InStr(strUA, „Mozilla“) Dann
Wenn InStr(strUA, „kompatibel;“) = 0 Dann
Antwort: „Ihr Browser ist wahrscheinlich Navigator. Sie können „_.“
& „Laden Sie die neueste Version von Navigator herunter von „_
& „<A HREF=“ & Chr(34) & http://home.netscape.com/ ”_
& „download/“& Chr(34) & „> http://home.netscape.com “_
& „/download/</A>
"
intVersion = Cint(Mid(strUA, InStr(strUA, „/“) +1, 1))
Wenn intVersion >= 4 Dann
Antwort: Schreiben Sie „Sie können wahrscheinlich Netscape Dynamic HTML verwenden.“
Ende wenn
Anders
strVersion = Mid(strUA, InStr(strUA, „kompatibel;“) + 12)
strProduct = Left(strVersion, InStr(strVersion, „ “))
Antwort: „Ihr Browser ist Navigator-kompatibel. Das können Sie.“_
& „Suchen Sie mit einer Suchmaschine nach dem Hersteller, z. B.“_
& „<A HREF=" & Chr(34) _
& „http://www.altavista.digital.com/cgi-bin/query?q=“_
&strProduct_
& Chr(34) & „> http://www.altavista.com/ </A>
"
Ende wenn
Ende wenn
Ende wenn
%>
Die Suchergebnisse für IE 5.0 und Navigator 4.61 unterscheiden sich jeweils. Für Browser anderer Hersteller können Sie auf der Alta Vista-Website einen Link erhalten, um automatisch nach dem Herstellernamen zu suchen.
Beachten Sie, dass Netscape den Namen des Herstellers nicht in der Benutzeragentenzeichenfolge bereitstellt. Daher gibt es keine absolute Garantie dafür, dass es sich bei einem Browser um einen Navigator handelt.
Erkennen der Sprache des Browsers
Ein weiterer nützlicher Wert in der ServerVariables-Sammlung ist „HTTP_ACCEPT_LANGUAGE“, der einen Sprachcode enthält, der bei der Installation des Browsers angegeben wird oder in der regionalen Version des Benutzers fest codiert ist. Beispiele für Sprachcodes sind en-us (Großbritannien, USA), de-at (Deutschland, Australien) und es-pe (Spanien, Peru).
Sprachcodes können generisch sein und keine Dialektkennungen enthalten: Auf unserer Website Wrox verwenden beispielsweise viele Besucher en (Englisch) als Sprachcode.
Daher kann der Sprachcode erkannt und automatisch eine entsprechende regionale oder sprachspezifische Version der Seite geladen werden.
StrLocale = Lcase(Left(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"),2))
Wählen Sie Case strLocale aus
Fall „en“: Response.Redirect „http://uk_site.co.uk/“
Fall „de“: Response.Redirect „http://de_site.co.de/“
Fall „fr“: Response.Redirect „http://fr_site.co.fr/“
'...usw
Anderer Fall: Response.Redirect „http://us_sitel.com/“
Ende Wählen Sie
die Seite basierend auf einem bestimmten Dialekt aus oder leiten Sie sie um:
strLocale = Lcase(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"))
Wählen Sie Case strLocale aus
Fall „en-gb“: Response.Redirect „http://uk_site.co.uk/“
Fall „en-us“: Response.Redirect „http://us_site.com/“
Fall „es-pe“: Response.Redirect „http://es_site2.co.pe/“
'...
Anderer Fall: Response.Redirect „http://us_site1.com/“
End Select
Andere nützliche Werte der ServerVariables-Sammlung
können auf jedes Mitglied der ServerVariables-Sammlung zugreifen und diese verwenden, um die Art und Weise zu steuern, wie die ASP-Seite auf eine Anfrage antwortet. Sie können überprüfen, ob ein Besucher über den Standardport 80 oder einen anderen auf die Website zugegriffen hat. Suchen Sie in diesem Beispiel nach Zugriff über Port 443 – der Secure Socket Layer (SSI)-Zugriff (und andere Protokolle) bietet – und leiten Sie sie auf eine entsprechende Seite weiter.
Wenn Request.ServerVariables("SERVER_PORT") = "443") Dann
Response.Redirect "/securesite/default.asp" 'Sicherer Benutzer
Anders
Response.Redirect „/normalsite/default.asp“ 'Nicht sicherer Benutzer
Ende Wenn
sich der Browser registrieren und vom Server verifizieren muss (anstatt ihm den anonymen Zugriff unter dem IUSER-Konto des Webservers zu ermöglichen, wird dieses Problem in einem späteren Kapitel ausführlich besprochen), kann der Benutzername sein abgefragt, um den Benutzer zu ermitteln, der mit uns zu tun hat, und um festzustellen, ob die Seite für diesen Benutzer geladen werden soll. Der folgende Code zeigt beispielsweise den Administrationslink nur Benutzern mit dem Namen „Administrator“ an.
...
<A HREF=“dispcnfg.asp“>Anzeigekonfiguration ändern</A>
<A HREF=“dispcolr.asp“>Anzeigefarben ändern</A>
<A HREF=“keyboard.asp“>Tastaturkonfiguration ändern</A >
<%
Wenn Request.ServerVariables("AUTH_USER") _
= Ucase(Request.ServerVariables(“SERVER_NAME”)) & „Administrator“ Dann
%>
<A HREF=“allusers.asp“>Alle Benutzer verwalten</A>
<A HREF=“usrlogon.asp“>Anmeldeinformationen verwalten</A>
<%
Ende wenn
%>
...
Beachten Sie, dass ASP die ServerVariables-Sammlung erst ausfüllt, wenn Sie auf eines seiner Mitglieder zugreifen. Wenn Sie zum ersten Mal auf ein Mitglied dieser Sammlung zugreifen, erhält IIS den gesamten Inhalt. Die ServerVariables-Sammlung sollte nur bei Bedarf verwendet werden.
Andere Anforderungs- und Antworttechniken
Schauen wir uns nun einige nützliche Techniken zur Verwendung der Anforderungs- und Antwortobjekte an, darunter:
· Verwaltung von Verbindungen, Pufferung und Seitenumleitungen.
· Betrieb von HTTP-Headern, Caching und „Ablauf“-Seiten.
· Nutzen Sie Client-Zertifikate.
· Erstellen Sie benutzerdefinierte Protokolldateinachrichten.
1. Verwaltung von Verbindungen, Pufferung und Seitenumleitungen
Eine sehr nützliche Funktion von ASP besteht darin, Benutzern die Umleitung von einer ASP-Webseite zu einer anderen Webseite (ASP oder HTML) oder zu einer anderen Quelldatei (z. B. einer ZIP-Datei oder einem Text) zu ermöglichen Datei) ). Dies ist für den Benutzer transparent, eigentlich ist es der Browser, der die Arbeit erledigt. Wenn Sie die Response.Redirect-Methode zum Laden einer neuen Webseite verwenden, wird tatsächlich ein spezieller HTTP-Header an den Client zurückgesendet. Dieser Header lautet:
HTTP/1.1 302 Objekt verschoben
Standort /newpath/newpage.asp
Der Browser liest diese Header-Informationen und lädt die Seite gemäß den Anweisungen des Standortwerts. Dies entspricht funktional der Verwendung des clientseitigen HTML-Tags <META> in einer Webseite, zum Beispiel:
<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=/newpath/newpage.asp">
Dies bringt a Das Problem besteht darin, dass der Proxyserver zwischen dem Server und dem Benutzer möglicherweise eine eigene Nachricht mit einem Link zur neuen Seite bereitstellt, anstatt die neue Seite direkt zu laden. Und Browser können je nach Hersteller und Version die gleiche Aufgabe erfüllen. Dadurch wird die vermeintliche Transparenz aufgehoben und der Zugriff auf Ihre Website für den Benutzer umständlicher, da er weiterhin Fehlermeldungen erhält.
Nach dem Senden von Seiteninhalten wie Text oder HTML können wir die Redirect-Methode nicht mehr verwenden. Eine Möglichkeit, die „Auswirkungen auf den Proxy-Server“ zu begrenzen, besteht jedoch darin, zunächst sicherzustellen, dass keine Ausgabe (einschließlich HTTP-Header) an den Client gesendet wird. In ASP 2.0 müssen Sie die Pufferung aktivieren und dann die Clear-Methode verwenden, um den Puffer zu löschen:
Response.Buffer = True
'Einige Bedingungen für die Auswahl der entsprechenden Seite:
Wenn Request.ServerVariables("SERVER_PORT") = 1856, dann
StrNewPage = „/newpath/this_page.asp“
Anders
StrNewPage = „/newpath/the_other_page.asp“
Ende wenn
Antwort.Klar
Response.Redirect strNewPage
In ASP 3.0 ist die Pufferung standardmäßig aktiviert, sodass die erste Zeile ignoriert werden kann. Sie ist jedoch harmlos und stellt sicher, dass unsere Webseite auch in einer ASP 2.0-Umgebung weiterhin funktioniert.
Anstatt diese Art der HTTP-Header-Umleitung zu verwenden, ist es besser, eine neue Funktion von ASP 3.0 zu verwenden, die es uns ermöglicht, eine andere Webseite über die Transfer-Methode des Server-Objekts zu konvertieren. Wir werden dieses Problem in Zukunft weiter untersuchen .
1) ASP-Seitenpuffer
Wie Sie gesehen haben, ist der ASP 3.0-Seitenpuffer in IIS 5.0 standardmäßig aktiviert und in früheren Versionen standardmäßig deaktiviert. Microsoft teilt uns mit, dass die Pufferung eine effizientere Webseitenbereitstellung in IIS 5.0 ermöglicht, weshalb der Standardzustand der Pufferung geändert wurde. In den meisten Fällen hat dies keine Auswirkungen auf uns. Wenn Sie jedoch eine sehr große Webseite haben oder eine Webseite, deren Erstellung mit ASP oder anderen serverseitigen Codes und Komponenten eine Weile dauert, können wir die fertigen Teile stapelweise auf dem Client aktualisieren:
.. .
... Code zum Erstellen des ersten Teils der Seite
...
Response.Flush
...
... Code zum Erstellen des nächsten Teils der Seite
...
Response.Flush
...
manchmal möchten Sie vielleicht die Codeausführung irgendwann vor dem Ende der Seite stoppen, indem Sie die End-Methode aufrufen, um den gesamten aktuellen Inhalt auf dem Client zu aktualisieren und jede weitere Verarbeitung abzubrechen.
...
... Code zum Erstellen des ersten Teils der Seite
Wenn strUserName = "", dann Response.Clear
...
... Code zum Erstellen einer neuen Version dieses Teils der Seite
...
Hier sind zwei Beispiel-Webseiten, die Pufferung und Umleitung demonstrieren und von der Hauptseite „Response Object“ (sow_response.asp) heruntergeladen werden können. Die erste Response.Redirect-Beispielseite heißt „redirect.asp“. Sie fügt Inhalte in die gepufferte Seite ein, löscht den Puffer und leitet zu einer anderen Webseite weiter:
Für intLoop = 1 bis 1000000
Response.Write „.“
Nächste
Antwort.Klar
Response.Redirect „show_redirect.asp“
Response.End-
Zielseite show_response.asp erledigt die gleiche Aufgabe, aber die Umleitung erfolgt zurück zur Homepage „Response Object“. Da diese Seiten gepuffert sind und alle Ausgaben vor der Umleitung gelöscht werden müssen, ist im Browser keine Ausgabe sichtbar. Allerdings kann jede auftretende Weiterleitung anhand des Status des Browsers erkannt werden. Wie in der folgenden Abbildung gezeigt:
<img src=/u/info_img/2009-06/25/asp14.jpg>
Klicken Sie auf der Startseite „Response Object“ auf den Link „Response.Flush“, um die zweite Beispielwebseite zu öffnen usebuffer.asp. Es durchläuft einfach jedes Zeichen einer Zeichenfolge und sendet sie mit einer gewissen Verzögerung an den Client. Obwohl dies eine sehr ineffiziente Verwendung von Webservern und ASP ist, zeigt es, wie die Pufferung funktioniert.
<img src=/u/info_img/2009-06/25/asp15.jpg>
Das Folgende ist der erforderliche minimale ASP-Code. Beachten Sie, dass wir jedes Zeichen separat im Browser aktualisieren, da es sonst im Puffer gespeichert wird Die Webseite ist vollständig:
strText = „Dieser Text wurde mit „ & _“ in den Browser übertragen.
„<B>Response.Flush</B>
"
Für intChar =1 To Len(strText)
Für intWrite = 1 bis 100000
Nächste
Response.Write Mid(strText,intChar,1)
Response.Flush
Weiter
2) Response.IsClientConnected-Eigenschaft
Die IsClientConnected-Eigenschaft existiert bereits in ASP 2.0, ist jedoch etwas unzuverlässig. Einige Ausgaben müssen an den Client gesendet werden, bevor ein genaues Ergebnis zurückgegeben wird. Dieses Problem wurde in ASP 3.0 gelöst. Diese Eigenschaft kann nun frei genutzt werden.
IsClientConnected ist eine nützliche Methode, um zu beobachten, ob der Benutzer noch mit dem Server verbunden ist und die von ASP erstellte Webseite lädt. Wenn der Benutzer die Verbindung trennt oder den Download abbricht, müssen wir beim Erstellen der Webseite keine Serverressourcen mehr verschwenden, da der Pufferinhalt von IIS verworfen wird. Daher lohnt es sich bei Webseiten, die viel Zeit für die Berechnung benötigen oder viele Ressourcen verbrauchen, in jeder Phase zu prüfen, ob der Browser offline ist:
...
... Code zum Erstellen des ersten Teils der Seite
...
Wenn Response.IsClientConnected, dann
Response.Flush
Anders
Antwort.Ende
Ende wenn
...
... Code zum Erstellen des nächsten Teils der Seite ...