Wir haben an mehreren Stellen gesehen, wie ASP die HTTP-Header erstellt oder ändert, die als Antwort auf Seitenanfragen an den Client gesendet werden. Es gibt mehrere Eigenschaften und Methoden im Response-Objekt, die uns dabei helfen können. Hier sind einige Header-Methoden:
· Kontrollieren Sie Caching und Ablauf.
· Erstellen Sie Status- und benutzerdefinierte HTTP-Header.
· Geben Sie den MIME-Typ oder Inhaltstyp an.
· Fügen Sie PICS-Tags hinzu.
Jeder dieser Aspekte wird im Folgenden kurz untersucht. Sie können die Eigenschaften und Methoden überprüfen, über die wir sprechen, indem Sie auf der Startseite „Response Object“ (show_response.asp) auf den entsprechenden Eigenschaftsnamen oder Methodennamen klicken.
1. Zwischenspeichern und „Ablaufen“ von ASP-Webseiten
Die Browser der Benutzer sowie alle Proxyserver zwischen ihnen und dem Server können mit ASP erstellte HTML- und Webseiten zwischenspeichern. Wenn der Benutzer anschließend die Seite anfordert, sendet der Browser eine „Zuletzt geändert“-Anfrage an den Server (unter Verwendung eines HTTP_IF_MODIFIED_SINCE-Headers, der das Datum der zwischengespeicherten Version enthält), um zu fragen, ob die Seite geändert wurde.
Wenn es nicht geändert wurde, sollte der Server mit einem Statuscode und der Meldung „304 Not Modified“ antworten und der Browser verwendet den zwischengespeicherten Inhalt, ohne eine Kopie über das Netzwerk herunterzuladen. Wenn bereits eine geänderte Version vorhanden ist, wird diese zusammen mit dem Statuscode und der Meldung „200 OK“ gesendet.
1) Response.CacheContol-Attribut
Andere Faktoren wirken sich ebenfalls auf diesen Verarbeitungsprozess aus. Allerdings kann jeder Proxyserver innerhalb der von der Webseite verwendeten Netzwerkroute (normalerweise auf der Clientseite) daran gehindert werden, die Webseite zwischenzuspeichern, indem die Eigenschaft „Response.CacheControl“ auf „Privat“ gesetzt wird. In ASP 3.0 ist dies die Standardeinstellung für ASP-Webseiten und muss nicht festgelegt werden. Es ist jedoch besonders nützlich, wenn eine Webseite speziell auf einzelne Besucher zugeschnitten ist. Dadurch wird verhindert, dass andere Benutzer im selben Netzwerk auf dieselbe Seite zugreifen. Wenn der CacheControl-Attributwert auf „Public“ gesetzt ist, darf der Server Webseiten zwischenspeichern. Beachten Sie, dass sich einige Proxyserver möglicherweise anders verhalten und diesen Header ignorieren oder umgehen.
In IE4 kann es vorkommen, dass die falsche Meldung „Diese Seite ist abgelaufen“ angezeigt wird, wenn Proxyserver-Caching verfügbar ist. Wir haben eine Webseite (expiretest_form.asp) bereitgestellt, die im Netzwerk über Ihren eigenen Proxyserver getestet werden kann, um die Auswirkungen dieses Attributs zu überprüfen. Diese Seite kann durch Klicken auf den Link „Response. CacheControl“ auf der Homepage „Response Object“ angezeigt werden. Wie in der folgenden Abbildung dargestellt:
Wenn diese Seite an die Webseite „expiretest_result.asp“ übermittelt wird, kann die Eigenschaft „Response.CacheControl“ festgelegt werden. Anschließend werden der Wert und die Zeit, zu der das Skript ausgeführt wird, in die Webseite eingefügt:
<%
Wenn Request.Form(„public“) = „on“, dann wurde das Kontrollkästchen „Cache-Control“ aktiviert
Response.CacheControl = "Öffentlich"
Anders
Response.CacheControl = „Privat“
Ende wenn
%>
<HTML>
...
Cache-Control ist: <B><% = Response.CacheControl %></B><P>
Der Wert im Textfeld ist: <B><% Response.Write Request.Form(“textbox”) %>
<%
Response.Write Right(„0“ & Hour(Now),2) & „:“ & Right(“0“ & Minute(Now),_
& 2) & „:“ & Right(„0“ & Second(Jetzt),2)
%></B>
Durch Klicken auf „Zurück“ und „Vorwärts“ im Browser können Sie sehen, ob der Code automatisch ausgeführt wird oder eine zwischengespeicherte Kopie verwendet.
2) Response.Expires- und Response.ExpiresAbsolute-Eigenschaften
Die beiden Eigenschaften, die die Speicherzeit zwischengespeicherter Webseiten steuern, sind die Expires- und ExpriesAbsolute-Eigenschaften des Response-Objekts. Response.Expires definiert den Zeitraum, ausgedrückt in Minuten seit der Erstellung, den eine Seite gültig bleiben soll, bevor sie aus dem Cache verworfen wird. Das ExpiresAbsolute-Attribut legt ein absolutes Datum und eine absolute Ablaufzeit fest.
Wir stellen eine Beispielwebseite mit dem Namen addheaders_form.asp zur Verfügung, um zu demonstrieren, wie diese Attribute verwendet werden. Klicken Sie auf der Startseite des Antwortobjekts auf den Link für beide Eigenschaften.
Auf der resultierenden Seite können Sie Ihre eigenen benutzerdefinierten HTTP-Header hinzufügen und verschiedene Attribute der HTTP-Header festlegen, die sich auf die Antwort auswirken. Wenn auf die Schaltfläche „Abfrageinhalt senden“ geklickt wird, fügt die Seite show_headers.asp die ausgewählten Header zum zurückgegebenen Datenstrom hinzu und zeigt dann den dafür verwendeten Code mit der entsprechenden Ausführungszeit an, mit der überprüft werden kann, ob die Seite war Der Cache wird noch einmal ausgeführt.
Der Code auf der Webseite show_headers.asp erstellt und fügt HTTP-Header hinzu. Das Verfahren ist wie folgt:
<%.
'Schreiben Sie HTTP-Header vor jeder anderen Ausgabe
Wenn Request.Form(“expires”) = „on“ dann _
Response.Expires = Request.Form("expires_value")
Wenn Request.Form(“expiresabs”) = „on“ Then _
Response.ExpiresAbsolute = Request.Form("expiresabs_value")
Wenn Request.Form("lastmod") = "on" Then _
Response.AddHeader „LAST-MODIFIED“, Cstr(Request.Form(“lastmod_value“))
Wenn Request.Form(“pragma”) = „on“ Then _
Response.AddHeader „PRAGMA“, CStr(Request.Form(“pragma_value“))
Wenn Request.Form("refresh") = "on" Then _
Response.AddHeader „REFRESH“, CStr(Request.Form(“refresh_value“))
Wenn Request.Form(“addheader“) = „on“ und Len(Request.Form(“addheader_name“)), dann _
Response.AddHeader CStr(Request.Form(“addheader_name”)), _
CStr(Request.Form(“addheader_value”))
Wenn Request.Form("status") = "on" Then _
Response.Status = Request.Form("status_value")
%>
<HTML>
...
...Code und Ausführungszeit anzeigen
...
der Rest zeigt nur den Code, der ausgeführt wurde und wann er ausgeführt wurde. Den Lesern wird der in der Webseite enthaltene benutzerdefinierte Header „PRAGMA“ auffallen (den wir bisher noch nicht besprochen haben). Einige (ehemalige) Proxyserver verwenden dies als Hinweis darauf, ob Webfestplatten zwischengespeichert werden sollen. Standardmäßig werden Seiten zwischengespeichert, es sei denn, der HTTP-Header „PRAGMA=NO-CACHE“ wird empfangen.
2. Erstellen Sie Statuscodes und benutzerdefinierte HTTP-Header.
Sie können die AddHeader-Methode des Response-Objekts verwenden, die Sie zuvor auf der Beispielwebseite gesehen haben, um Ihre eigenen Statuscodes oder benutzerdefinierten Header zu erstellen, die Ihnen gefallen. Diese Methode erfordert zwei Parameter: den HTTP-Header-Namen oder eine Zeichenfolge, die seinen Wert oder den ihm zugewiesenen Wert enthält. Als Beispiel fügt der folgende Code der Seite einen REFRESH-Header hinzu:
Response.AddHeader „REFRESH“, „60;URL=newpath/newpage.asp“
Dies entspricht dem clientseitigen <META>-Element:
<META HTTP- EQUIV=" REFRESH", "60;URL=newpath/newpage.asp">
Mit anderen Worten: Sie können auch die AddHeader-Methode mit dem Status-Attribut verwenden, um den Browser dazu zu bringen, eine neue Seite zu laden:
Response.Status = "302 Object Moved "
Response.Addheader „Location“, „newpath/newpage.asp“
Dies entspricht der Verwendung der Response.Redirect-Methode:
Response.Redirect „newpath/newpage.asp“
Die Response.Status-Eigenschaft kann zum Senden einiger erforderlicher Statusmeldungen verwendet werden. Fügen Sie beispielsweise die folgenden Zeilen hinzu:
Response.Status= „401 Unauthorized“
Response.Addheader „WWW-Authenticate“, „BASIC“
zwingt den Browser, einen Benutzername/Passwort-Dialog anzuzeigen und diese dann mithilfe der BASIC-Authentifizierung (die wird in diesem Artikel behandelt (siehe Verifizierungsmethoden später in der Serie).
3. MIME-Typ und Inhaltstyp
Wenn wir eine dynamisch erstellte Zeichenfolge an den Browser senden möchten, geben sie bei der Bereitstellung an den Browser nicht direkt den Inhaltstyp an, sondern stellen eine Erweiterung bereit, die angibt, ob es sich um eine Festplattendatei handelt, Antwort . ContentType ist sehr nützlich. Sofern nicht anders angegeben, verwenden alle von ASP erstellten Webseiten standardmäßig „text/type“. Die Kennung des Inhaltstyps ist der MIME-Typ (MIME steht für Multi-Purpose Internet Multimedia Extension oder Multi-Purpose Internet Mail Extension, normalerweise abhängig vom Kontext).
Wenn es sich bei der an den Client gesendeten Datenanmerkung beispielsweise um ein Bild handelt, das durch Lesen von Binärwerten aus einer Datenbank erstellt wurde, müssen Sie vor dem Senden von Inhalten den entsprechenden CONTENT-TYPE-Header hinzufügen:
Response.ContentType = „image/jpeg“
Wenn Sie erstellen ein Bild aus einer Datenbank. Verwenden Sie für XML-Dateien den MIEM-Typ „text/xml“ und wenn Sie eine Textdatei erstellen, die in einem Dateieditor angezeigt oder als Festplattendatei auf dem Client gespeichert werden kann, verwenden Sie „text /Text".
4. Hinzufügen eines PICS-Tags
Die Respnse.Pics-Eigenschaft fügt der Seite einfach ein PICS-Tag (Platform for Internet Content System) auf die gleiche Weise wie das übliche <META>-Tag hinzu:
QUOT = Chr(34)
StrPicsLabel = „(PICS-1.0“ & QUOT & „http://www.rsac.org/ratingsv01.html“_
& QUOT & „ 1 Generation echter Kommentar“ & QUOT _
& „RSACi North America Server“ & QUOT & „ für „ & QUOT _
& „http://yoursite.com“ & QUOT & „ on „ & QUOT _
& „1999.08.01T03:04-0500“ & QUOT & „ r (n 0 s 0 v 2 l 3))“
Response.Pics(strPicsLabel)
Dieser Code fügt das folgende PICS-Label hinzu:
(PICS-1.0 „http://www.rsac.org/ratingsv01.html“ 1 gen true comment „RSACi
North America Server“ für „http://yoursite.com“ am „1999.08.01T03:04-0500“
r (n 0 s 0 v 2 l 3))
Um weitere Informationen zu PICS zu erhalten oder mehr über die Art und Weise zu erfahren, wie Seiteninhalte definiert werden, durchsuchen Sie bitte die Website http://www.rsac.org/ .
Definieren von Headern im Internet Service Manager
Im ersten Teil dieser Artikelserie wurde erläutert, wie die Eigenschaften jeder Website und jedes IIS 5.0-Verzeichnisses in der Anwendung Internet Service Manage (MMC-Plug-in) festgelegt werden, die die Verwendung definiert Die Ressourcen dieser Site oder des Verzeichnisses werden in den HTTP-Headern aller Anforderungen an den Client gesendet. Dies stellt eine Alternative zum Festlegen dieser Eigenschaften mithilfe von ASP-Skriptcode auf jeder Webseite dar.
Klicken Sie mit der rechten Maustaste auf die Website oder das Verzeichnis und wählen Sie „Eigenschaften“. Auf der Registerkarte „HTTP-Header“ des Dialogfelds können Sie die relative Zeit oder das absolute Datum für den Gültigkeitszeitraum des Seiteninhalts festlegen, benutzerdefinierte Header definieren und Erstellen Sie Beschriftungen auf PICS-Inhaltsebene. Inhaltstypen können auch über die MIME-Typzuordnung definiert werden.
Sie können sehen, dass ein benutzerdefinierter REFRESH-HTTP-Header erstellt und auf alle aus diesem Verzeichnis geladenen Webseiten angewendet wurde. Das heißt, es wird jede Minute automatisch neu geladen (aktualisiert) (ideal für die Anzeige der neuesten Ergebnisse von Baseballspielen, aber eine zu große Belastung für den Server).
Um benutzerdefinierte Inhaltstypzuordnungen im Feld „MIME-Zuordnung“ hinzuzufügen, klicken Sie einfach auf die Schaltfläche „Dateitypen“ im Hauptdialogfeld „Eigenschaften“, um sie der Liste hinzuzufügen.
Wenn Sie anfangen, mit HTTP-Headern zu experimentieren, werden Sie schnell feststellen, dass sich nicht alle Browser gleich verhalten und viele Browser unterschiedlich auf unterschiedliche HTTP-Header reagieren, was es manchmal äußerst schwierig macht, ein allgemeingültiges Prinzip zuverlässig festzulegen.
2. Client-Zertifikate verwenden
Wenn Sie eine sichere Website oder eine Site mit einem sicheren Teil ihres Inhalts einrichten, können Sie ein digitales Serverzertifikat installieren, um den Server zu authentifizieren, indem Sie Besuchern die Verwendung der verschlüsselten Details im Zertifikat ermöglichen. Bei jeder Seitenanforderung an die Site oder das Verzeichnis sendet der Server eine Kopie des Zertifikats, die der Browser prüfen kann, um festzustellen, mit wem er kommuniziert.
Ebenso kann der Server so eingerichtet werden, dass Benutzer beim Betreten der Website ein gültiges digitales Zertifikat angeben müssen. Sie können dieses Zertifikat von vielen Quellen erhalten, beispielsweise von Verisign ( http://www.verisign.com ) oder Thawte Consulting ( http://www.thawte.com ). Der Leser wird die Einzelheiten dieses Prozesses in Kapitel 25 sehen.
Diese Situationen verwenden alle die Werte der ClientCertificate-Sammlung des Request-Objekts. Der Beispielcode in diesem Kapitel enthält eine Seite, die zeigt, wie Benutzer einige der Methoden dieser Sammlungswerte verwenden.
Diese Seite heißt showcert.asp und durchläuft lediglich die ClientCertificate-Sammlung und zeigt alle darin enthaltenen Werte an. Dies kann mit demselben einfachen Code erfolgen, den Sie bisher immer verwendet haben. Der einzige Unterschied besteht darin, eine HTML-Tabelle zu erstellen, um die Ergebnisse zu speichern und sie in Gruppen von 60 Zeichen zu kürzen.
<TABEL CELLPADDING=0 CELLSPACING=0>
<%
Für jedes keyItem in Request.ClientCertificate()
StrItemValue = Request.ClientCertificate(keyItem)
Wenn Len(strItemValue) > 90, dann strItemValue = Left(strItemValue, 60) & „..etc.“
Response.Write „<TR><TD>“ & keyItem & „ = „ & strItemValue & „</TD></TR>“
Nächste
%>
</TABLE>
Verwenden der Umleitung von Client-Zertifikaten
Sobald alle Besucher einer Site oder eines Teils einer Site aufgefordert werden, ihr Client-Zertifikat anzugeben, können die darin enthaltenen Informationen zum Erstellen der Webseiten verwendet werden, die wir für diesen Benutzer erstellen. Sie können beispielsweise den Organisationseintrag ihres Zertifikats verwenden, um sie automatisch zu einem bestimmten Teil der Website und andere Besucher an eine andere Stelle umzuleiten:
If Request.ClientCertificate("SubjectO") = "Wrox Press Inc" Then
Response.Redirect "/wrox_staff/default.asp" 'Wrox-Mitarbeiterseite
Anders
Response.Redirect "/public/Default.asp" 'Normale öffentliche Site
Ende Wenn
dementsprechend der Ländereintrag verwendet werden kann, um den Besucher auf eine entsprechende Website weiterzuleiten:
Wählen Sie Case Request.ClientCertificate("SubjectC")
Fall „UK“: 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/“
'... ect.
Anderer Fall: Response.Redirect „http://us_site.com/“
Ende Auswählen
3. Lesen und Schreiben von Binärdaten
Es gibt zwei Methoden, die binären Datenzugriff auf den vom Browser an den Server gesendeten HTTP-Datenstrom und den vom Server an den Browser zurückgegebenen Datenstrom ermöglichen. Die Request.BinaryRead-Methode kann einen Parameter abrufen, der die Anzahl der zu lesenden Bytes angibt, und gibt ein Array vom Typ Variant zurück, das die aus dem angeforderten POST-Segment erhaltenen Bytes enthält (z. B. Daten in der Form-Sammlung des ASP). Das folgende Programm liest die ersten 64 Bytes der Daten:
varContent = Request.BinaryRead(64)
Wenn Sie die BinaryRead-Methode verwenden, können Sie in Zukunft nicht mehr auf die Request.Form-Sammlung von ASP zugreifen. Ebenso können wir die BinaryRead-Methode nicht mehr verwenden, sobald wir in irgendeiner Weise auf die Request.Form-Sammlung verweisen.
Mit der BinaryWrite-Methode ist es auch möglich, Binärdaten in den von ASP erstellten Antwortstream zu schreiben. Sie müssen ihm ein Variantenarray der Bytes bereitstellen, die Sie an den Client schreiben möchten:
Response.BinaryWrite(varContent)
Diese Methoden werden selten verwendet, es sei denn, Sie erstellen eine Nicht-HTML-Quelle aus einer Datenbank. Ein Anwendungsbeispiel besteht darin, die Bytes, aus denen das Bild besteht, aus der Datenbank zu lesen und es mithilfe der BinaryWrite-Methode an den Client zu senden.
4. Erstellen Sie eine benutzerdefinierte Protokollnachricht.
Wenn der Server so eingerichtet ist, dass er Anforderungen in einer Textdatei im W3C Extended Log File Format protokolliert, können Sie die Response.AppendToLog-Methode verwenden, um am Ende des Protokolldateieintrags eine Nachrichtenzeichenfolge hinzuzufügen. Diese Methode ist sehr nützlich, wenn Sie einige Werte oder Nachrichten für eine bestimmte Webseite speichern möchten oder wenn eine bestimmte Situation im Skript auftritt.
Über die Anwendung „Stationäre Bestellung“ eines Intranets können Sie beispielsweise die Abteilungsnummern von Mitarbeitern erfassen, die eine bestimmte Anzahl an Einträgen überschreiten:
...
Wenn intItemCount > 25 Dann
Response.AppendToLog „Großer Auftrag von „“ & strDept & Abteilung.“
Ende wenn
...
Erweiterte Protokollierung einrichten
Um die AppendToLog-Methode verwenden zu können, muss die Protokollierungseinstellung W3C Extended Log File Format aktiviert sein. Die Einstellungsmethode besteht darin, die Registerkarte „Website“ im Dialogfeld „Eigenschaften“ aufzurufen, das Kontrollkästchen „Protokollierung aktivieren“ zu aktivieren, das erweiterte W3C-Protokolldateiformat auszuwählen und auf die Schaltfläche „Eigenschaften“ zu klicken, wie in der folgenden Abbildung dargestellt:
Im Dialogfeld „Erweiterte Protokollierungseigenschaften“ wird Folgendes
angezeigt:erscheint. Sie können die Einträge auswählen, die Sie in die Protokolldatei aufnehmen möchten. Stellen Sie sicher, dass der URI-Stamm aktiviert ist, andernfalls schlägt die AppendToLog-Methode fehl.
Wir haben eine einfache Beispielseite bereitgestellt, die versucht, einen Eintrag in die Protokolldatei zu schreiben, die über den Link zur AppendToLog-Methode auf der Request Object-Homepage (show_request.asp) geöffnet werden kann. Diese Seite erstellt lediglich eine einfache Zeichenfolge mit dem aktuellen Datum und der aktuellen Uhrzeit und führt dann die AppendToLog-Methode aus:
strToAppend = „Seite ausgeführt am“ & Jetzt
Response.AppendToLog strToAppend
Zusammenfassung
Mit diesem Artikel haben wir mit der Untersuchung von ASP 3.0 begonnen, und wir haben auch gesehen, wie ASP 3.0 mit Internet Information Server 5.0 zusammenarbeitet, um eine benutzerfreundliche und effiziente Methode zum Erstellen dynamischer Webseiten und Webanwendungen bereitzustellen. . Natürlich gibt es noch einige Stellen, die untersucht werden müssen. In diesem Kapitel wurden nur die beiden grundlegendsten in ASP integrierten Objekte kennengelernt.
Die beiden grundlegendsten Objekte sind die Request- und Response-Objekte, die es uns ermöglichen, im Rahmen einer Client/Server-Sitzung auf Werte zuzugreifen und diese zu verwenden, was immer dann geschieht, wenn ein Benutzer eine Seite oder Ressource von einer Website anfordert und lädt dass das Request-Objekt den Zugriff auf alle vom Benutzer angeforderten Inhalte ermöglichen kann, während das Response-Objekt die Erstellung und Änderung der vom Server zurückgesendeten Antwort ermöglicht.
Diese Objekte machen verschiedene Teile der Sitzung über Sammlungen und Eigenschaften verfügbar und bieten mehrere Methoden zum Abrufen und Ändern einzelner Segmente. Wenn Sie sie als Tools betrachten, mit denen Sie die Anfrage eines Benutzers aufschlüsseln und eine Antwort mit dem entsprechenden Inhalt erstellen können, können Sie besser verstehen, was vor sich geht. Es hilft auch zu verstehen, wie sich verschiedene Methoden auf den Client, den Server und die zu erstellende Webseite auswirken.