Mit dieser Funktion kann ein Webdienst eine HTTP-Option für die Prozesssteuerung festlegen.
sa_set_http_option( optname, val )
optname Verwenden Sie diesen CHAR(128)-Parameter, um eine Zeichenfolge anzugeben, die den Namen einer der HTTP-Optionen enthält.
Die unterstützten Optionen sind folgende:
CharsetConversion Verwenden Sie diese Option, um zu steuern, ob die Ergebnismenge automatisch von der Zeichensatzkodierung der Datenbank in die Zeichensatzkodierung des Clients konvertiert werden soll. Die einzigen zulässigen Werte sind ON und OFF. Der Standardwert ist ON.
AcceptCharset Verwenden Sie diese Option, um die Voreinstellungen des Webservers für die Zeichensatzkodierung von Antworten anzugeben. Eine oder mehrere Zeichensatzkodierungen können in der Reihenfolge der Präferenz angegeben werden. Die Syntax dieser Option entspricht der Syntax, die bei der Angabe des Anforderungsheader-Felds "Accept-Charset" im RFC2616 Hypertext Transfer Protocol verwendet wird.
Ein HTTP-Client, wie z.B. ein Webbrowser, liefert möglicherweise einen Accept-Charset-Anforderungsheader, der eine nach Präferenz sortierte Liste von Zeichensatzkodierungen enthält. Optional kann jeder einzelnen Kodierung ein Qualitätswert zugeordnet werden (q=qvalue), der die Präferenz des Clients für die Kodierung darstellt. Standardmäßig ist der Qualitätswert 1 (q=1). Ein Beispiel:
Accept-Charset: iso-8859-5, utf-8;q=0.8 |
Ein Pluszeichen (+) im Wert der HTTP-Option AcceptCharset kann als Abkürzung für die aktuelle Zeichensatzkodierung der Datenbank verwendet werden. Das Pluszeichen zeigt außerdem an, dass die Zeichensatzkodierung der Datenbank Vorrang haben soll, wenn der Client die Kodierung ebenfalls in seiner Liste angibt, und zwar unabhängig von dem vom Client zugeordneten Qualitätswert.
Mit einem Sternchen (*) in der HTTP-Option AcceptCharset kann angezeigt werden, dass der Webdienst bei Fehlen einer Schnittmenge zwischen den Listen von Server und Client eine vom Client bevorzugte Zeichensatzkodierung verwenden soll, sofern diese auch vom Server unterstützt wird.
Beim Senden der Antwort wird die erste Zeichensatzkodierung verwendet, die sowohl vom Client als auch vom Webdienst bevorzugt wird. Die Präferenzreihenfolge des Clients hat Vorrang. Wenn keine gemeinsame Kodierungspräferenz vorhanden ist, wird die vom Webdienst bevorzugte Kodierung verwendet, es sei denn, in der Webdienst-Liste erscheint ein Sternchen (*). In diesem Fall wird die vom Client bevorzugte Kodierung verwendet.
Ohne die HTTP-Option AcceptCharset wird die Zeichensatzkodierung mit der höchsten Präferenz verwendet, die vom Client angegeben und vom Server unterstützt wird. Wenn keine der vom Client angegebenen Kodierungen unterstützt wird (oder der Client keinen Accept-Charset-Anforderungsheader sendet), wird die Zeichensatzkodierung der Datenbank verwendet.
Wenn ein Client keinen Accept-Charset-Anforderungsheader sendet, wird eine der folgenden Aktionen ausgeführt:
Falls die HTTP-Option AcceptCharset nicht angegeben wurde, verwendet der Webserver die Zeichensatzkodierung der Datenbank.
Falls die HTTP-Option AcceptCharset angegeben wurde, verwendet der Webserver seine bevorzugte Zeichensatzkodierung.
Wenn ein Client einen Accept-Charset-Anforderungsheader sendet, wird eine der folgenden Aktionen ausgeführt:
Falls die HTTP-Option AcceptCharset nicht angegeben wurde, versucht der Webserver, eine der vom Client bevorzugten Zeichensatzkodierungen zu verwenden, beginnend mit der höchsten Präferenz. Wenn der Webserver keine der vom Client bevorzugten Kodierungen unterstützt, verwendet er die Zeichensatzkodierung der Datenbank.
Falls die HTTP-Option AcceptCharset angegeben wurde, versucht der Webserver, die Zeichensatzkodierung mit der höchsten Präferenz zu verwenden, die in beiden Listen enthalten ist, beginnend mit der Kodierung, die für den Client die höchste Präferenz aufweist. Wenn der Client beispielsweise einen Accept-Charset-Anforderungsheader mit einer Liste sendet, die in der Reihenfolge der Präferenz die Kodierungen iso-a, iso-b und iso-c enthält, und der Webserver iso-b gegenüber iso-a und schließlich iso-c bevorzugt, wird iso-a ausgewählt.
Web client: iso-a, iso-b, iso-c Web server: iso-b, iso-a, iso-c |
Wenn die Schnittmenge der beiden Tabellen leer ist, wird der vom Webserver bevorzugte Zeichensatz verwendet. Im folgenden Beispiel wird Kodierung iso-d verwendet.
Web client: iso-a, iso-b, iso-c Web server: iso-d, iso-e, iso-f |
Wenn in der HTTP-Option AcceptCharset ein Sternchen ('*') enthalten wäre, würde den vom Client bevorzugten Kodierungen der Vorrang gegeben, woraus sich die Verwendung von iso-a ergibt. Im Wesentlichen sorgt die Verwendung eines Sternchens dafür, dass die Schnittmenge der beiden Listen nicht leer sein kann.
Die ideale Situation tritt ein, wenn sowohl der Client als auch der Webdienst die Zeichensatzkodierung der Datenbank verwenden, weil dann die Zeichensatzkonvertierung entfällt und sich dadurch die Antwortzeit des Webservers verbessert.
Hinweis: Wenn die Option CharsetConversion auf OFF gesetzt wurde, wird die AcceptCharset-Verarbeitung nicht ausgeführt.
SessionID Verwenden Sie diese Option, um eine HTTP-Sitzung zu erstellen, zu löschen oder umzubenennen. Die Datenbankverbindung bleibt erhalten, wenn ein Webdienst diese Option zum Erstellen einer HTTP-Sitzung setzt, aber Sitzungen bleiben nicht über einen Neustart des Servers hinaus erhalten. Wenn Sie sich bereits in einem Sitzungskontext befinden, benennen Sie mit diesem Aufruf die Sitzung in die neue Sitzungs-ID um. Wenn die Sitzung mit einem Nullwert aufgerufen wurde, wird sie beim Beenden des Webdiensts gelöscht.
Die generierten Sitzungsschlüssel sind auf eine Länge von 128 Zeichen beschränkt und, falls mehrere Datenbanken geladen sind, datenbankübergreifend eindeutig.
SessionTimeout Verwenden Sie diese Option, um anzugeben, wie viele Minuten die HTTP-Sitzung während einer Inaktivitätsphase erhalten bleibt. Diese Zeitüberschreitung wird jedes Mal zurückgesetzt, wenn eine HTTP-Anforderung die gegebene Sitzung verwendet. Die Sitzung wird automatisch gelöscht, wenn der SessionTimeout-Wert überschritten wird.
val Verwenden Sie diesen LONG VARCHAR-Parameter, um den Wert anzugeben, auf den die benannte Option gesetzt werden soll.
Verwenden Sie diese Prozedur innerhalb von Anweisungen oder Prozeduren im Zusammenhang mit Webdiensten, um Optionen zu setzen.
Wenn sa_set_http_option aus einer über einen Webdienst aufgerufenen Prozedur aufgerufen wird und entweder die Option oder ein Optionswerts ungültig ist, wird ein Fehler zurückgegeben.
Keine
Keine
Das folgende Beispiel zeigt die Verwendung von sa_set_http_option zum Anzeigen der Präferenzen des Webdiensts im Hinblick auf die Zeichensatzkodierung der Datenbank. Die UTF-8-Kodierung ist als zweite Wahl angegeben. Das Sternchen (*) bedeutet, dass der Webdienst auch die vom Client bevorzugte Zeichensatzkodierung verwenden wird, vorausgesetzt, diese wird vom Webserver unterstützt.
CALL sa_set_http_option( 'AcceptCharset', '+,UTF-8,*'); |
Das folgende Beispiel zeigt die Verwendung von sa_set_http_option zum korrektem Identifizieren der vom Webdienst verwendeten Zeichenkodierung. In diesem Beispiel ist der Webserver mit einer 1251CYR-Datenbank verbunden und kann jeden Webbrowser mit HTML-Dokumenten versorgen, die das kyrillische Alphabet enthalten.
CREATE PROCEDURE cyrillic_html() RESULT (html_doc XML) BEGIN DECLARE pos INT; DECLARE charset VARCHAR(30); CALL sa_set_http_option( 'AcceptCharset', 'iso-8859-5, utf-8' ); SET charset = CONNECTION_PROPERTY( 'CharSet' ); -- Change any IANA labels like ISO_8859-5:1988 -- to ISO_8859-5 for Firefox. SET pos = LOCATE( charset, ':' ); IF pos > 0 THEN SET charset = LEFT( charset, pos - 1 ); END IF; CALL sa_set_http_header( 'Content-Type', 'text/html; charset=' || charset ); SELECT '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">' || XMLCONCAT( XMLELEMENT('HTML', XMLELEMENT('HEAD', XMLELEMENT('TITLE', 'Cyrillic characters') ), XMLELEMENT('BODY', XMLELEMENT('H1', 'First 5 lowercase Russian letters'), XMLELEMENT('P', UNISTR('\u0430\u0431\u0432\u0433\u0434')) ) ) ); END; CREATE SERVICE cyrillic TYPE 'RAW' AUTHORIZATION OFF USER DBA AS CALL cyrillic_html(); |
Der folgende Accept-Charset-Header veranschaulicht den Prozess zur Festlegung der zu verwendenden Zeichensatzkodierung, die von einem Webbrowser wie Firefox an den Webdienst geliefert wird. Er zeigt an, dass der Browser die Kodierungen ISO-8859-1 und UTF-8 bevorzugt, aber auch andere akzeptiert.
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
Der Webdienst akzeptiert nicht die Zeichensatzkodierung ISO-8859-1, da die zu übertragende Webseite kyrillische Zeichen enthält. Der Webdienst bevorzugt die Kodierung ISO-8859-5 oder UTF-8, wie durch den Aufruf von sa_set_http_option angegeben. In diesem Beispiel wird die UTF-8-Kodierung gewählt, da sie von beiden Seiten bevorzugt wird. Die Datenbank-Verbindungseigenschaft 'CharSet' zeigt an, welche Kodierung vom Webdienst ausgewählt wurde. Die sa_set_http_header-Prozedur wird verwendet, um die Kodierung des HTML-Dokuments dem Webbrowser anzuzeigen.
Content-Type: text/html; charset=UTF-8 |
Wenn der Webbrowser keinen Accept-Charset-Wert angibt, verwendet der Webdienst standardmäßig seine erste Präferenz, ISO-8859-5. Die sa_set_http_header-Prozedur wird verwendet, um die Kodierung des HTML-Dokuments anzuzeigen.
Content-Type: text/html; charset=ISO_8859-5 |
Im folgenden Beispiel wird eine eindeutige HTTP-Sitzungs-ID festgelegt:
DECLARE sessionid VARCHAR(30); DECLARE tm TIMESTAMP; SET tm = NOW(*); SET sessionid = 'MySessions_' || CONVERT( VARCHAR, SECONDS(tm)*1000 + DATEPART(millisecond,tm)); CALL sa_set_http_option('SessionID', sessionid); |
Im folgenden Beispiel wird die Zeitüberschreitung für eine HTTP-Sitzung auf 5 Minuten festgelegt:
CALL sa_set_http_option('SessionTimeout', '5'); |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |