Web サービスによるプロセス制御用の HTTP オプションの設定を許可します。
sa_set_http_option( optname, val )
optname HTTP オプションのいずれかの名前を含む文字列を指定する CHAR(128) パラメーター。
サポートされるオプションは次のとおりです。
CharsetConversion このオプションを使用して、結果セットをデータベースの文字セットエンコードからクライアントの文字セットエンコードに自動的に変換するかどうかを制御します。指定できる値は、ON と OFF だけです。デフォルト値は ON です。
AcceptCharset このオプションを使用して、応答の文字セットエンコードに関する Web サーバーの優先度を指定します。1 つ以上の文字セットエンコードを優先度順に指定できます。このオプションの構文は、RFC2616 Hypertext Transfer Protocol の HTTP Accept-Charset 要求ヘッダーフィールドの仕様に使用する構文に準拠します。
Web ブラウザーなどの HTTP クライアントでは、Accept-Charset 要求ヘッダーを使用して、優先度順の文字セットエンコードのリストを指定できます。必要に応じて、各エンコードには、対応する品質値 (q=qvalue) を指定できます。この品質値は、そのエンコードに対するクライアントの優先度を表します。デフォルトでは、品質値は 1 (q=1) です。次に例を示します。
Accept-Charset: iso-8859-5, utf-8;q=0.8 |
AcceptCharset HTTP オプション値内のプラス記号 (+) は、現在のデータベースの文字セットエンコードを表すショートカットとして使用できます。また、プラス記号は、クライアントのリストでもエンコードが指定されている場合に、クライアントによって割り当てられている品質値に関係なく、データベースの文字セットエンコードを優先する必要があることも示します。
AcceptCharset HTTP オプション内のアスタリスク (*) は、クライアントとサーバーのリストに共通部分がない場合に、クライアントで優先される文字セットエンコードがサーバーでもサポートされていれば、Web サービスでその文字セットエンコードを使用する必要があることを示します。
応答の送信時には、クライアントと Web サービスの両方で優先される最初の文字セットエンコードが使用されます。クライアントの優先度順が最初に考慮されます。共通のエンコード優先度が存在しない場合は、Web サービスのリストにアスタリスク (*) がなければ、Web サービスで最も優先されるエンコードが使用されます。アスタリスクがある場合は、クライアントで最も優先されるエンコードが使用されます。
AcceptCharset HTTP オプションを使用しない場合は、クライアントで指定され、サーバーでサポートされている最も優先度の高い文字セットエンコードが使用されます。クライアントで指定されたどのエンコードもサポートされていない場合 (またはクライアントが Accept-Charset 要求ヘッダーを送信しない場合) は、データベースの文字セットエンコードが使用されます。
クライアントが Accept-Charset ヘッダーを送信しない場合は、次のいずれかのアクションが実行されます。
AcceptCharset HTTP オプションが指定されていない場合、Web サーバーではデータベースの文字セットエンコードを使用します。
AcceptCharset HTTP オプションが指定されている場合、Web サーバーでは最も優先度の高い文字セットエンコードを使用します。
クライアントが Accept-Charset ヘッダーを送信する場合は、次のいずれかのアクションが実行されます。
AcceptCharset HTTP オプションが指定されていない場合、Web サーバーではクライアントで優先される文字セットエンコードのいずれかを使用しようとします (最も優先度の高いエンコードから開始)。クライアントで優先されるどのエンコードも Web サーバーでサポートされていない場合、Web サーバーではデータベースの文字セットエンコードを使用します。
AcceptCharset HTTP オプションが指定されている場合、Web サーバーでは両方の優先度リストで共通する最初の文字セットエンコードを使用しようとします (クライアントで最も優先されるエンコードから開始)。たとえば、クライアントが送信する Accept-Charset ヘッダーリストのエンコードの優先度順が iso-a、iso-b、iso-c であり、Web サーバーでの優先度順が iso-b、iso-a、iso-c の場合、iso-a が選択されます。
Web client: iso-a, iso-b, iso-c Web server: iso-b, iso-a, iso-c |
2 つのリストに共通部分がない場合、Web サーバーで最初に優先される文字セットが使用されます。次の例では、エンコード iso-d が使用されます。
Web client: iso-a, iso-b, iso-c Web server: iso-d, iso-e, iso-f |
AcceptCharset HTTP オプションにアスタリスク ('*') が含まれている場合は、クライアントのエンコードが優先されるため、iso-a が使用されます。基本的に、アスタリスクを使用すると、2 つのリストに共通部分がないという状況がなくなります。
理想的な状況は、クライアントと Web サービスの両方でデータベースの文字セットエンコードが使用される場合です。このような場合、文字セットの変換の必要性がなくなり、Web サーバーの応答時間が向上します。
CharsetConversion オプションを OFF に設定している場合、AcceptCharset の処理は実行されないことに注意してください。
SessionID このオプションを使用して、HTTP セッションの作成、削除、または名前の変更を行います。Web サービスでこのオプションを設定して HTTP セッションを作成するときにはデータベース接続は維持されますが、サーバーの再起動時にはセッションは維持されません。すでにセッションコンテキスト内にある場合、この呼び出しによってセッションの名前が新しいセッション ID に変更されます。NULL 値を使用して呼び出した場合、Web サービスが終了するとセッションは削除されます。
生成されるセッションキーの長さは 128 文字に制限され、複数のデータベースがロードされている場合はデータベース間でユニークになります。
SessionTimeout このオプションを使用して、非アクティブ状態の HTTP セッションを維持する時間を分単位で指定します。このタイムアウト期間は、HTTP 要求で指定のセッションが使用されると常にリセットされます。SessionTimeout を過ぎると、セッションは自動的に削除されます。
val 指定されたオプションに設定する値を指定する LONG VARCHAR パラメーター。
Web サービスを処理する文またはプロシージャー内でこのプロシージャーを使用して、オプションを設定します。
sa_set_http_option が Web サービスによって開始されたプロシージャー内から呼び出され、オプションまたはオプションの値のいずれかが無効な場合は、エラーが返ります。
なし。
なし。
次の例は、sa_set_http_option を使用して、データベースの文字セットエンコードに関する Web サービスの優先度を指定する方法を示します。2 番目の選択肢として UTF-8 エンコードが指定されています。アスタリスク (*) は、クライアントで最も優先される文字セットエンコードが Web サーバーでサポートされている場合に、Web サービスでその文字セットエンコードが使用されることを示しています。
CALL sa_set_http_option( 'AcceptCharset', '+,UTF-8,*'); |
次の例は、sa_set_http_option を使用して、Web サービスで使用されている文字エンコードを正しく識別する方法を示します。この例では、Web サーバーは 1251CYR データベースに接続されており、キリル語のアルファベットを含む HTML ドキュメントを任意の Web ブラウザーに提供するように準備されています。
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(); |
Firefox などの Web ブラウザーから Web サービスに配信される、次の Accept-Charset ヘッダーを例に、使用する正しい文字セットエンコードを確立するプロセスについて説明します。このヘッダーは、ブラウザーでは ISO-8859-1 と UTF-8 のエンコードが優先されるものの、他のエンコードも処理できることを示しています。
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
転送される Web ページにキリル語の文字が含まれているため、Web サービスでは ISO-8859-1 文字セットエンコードは受け入れられません。Web サービスでは、sa_set_http_option の呼び出しで指定されているように、ISO-8859-5 または UTF-8 エンコードが優先されます。この例では、UTF-8 エンコードが選択されます (両方で許容されるため)。データベース接続プロパティ 'CharSet' は、どのエンコードが Web サービスで選択されたかを示します。sa_set_http_header プロシージャーは、Web ブラウザーに対して HTML ドキュメントのエンコードを示すために使用します。
Content-Type: text/html; charset=UTF-8 |
Web ブラウザーで Accept-Charset が指定されていない場合、Web サービスではデフォルトで最初の優先エンコード ISO-8859-5 が使用されます。sa_set_http_header プロシージャーは、HTML ドキュメントのエンコードを示すために使用します。
Content-Type: text/html; charset=ISO_8859-5 |
次の例では、ユニークな HTTP セッション識別子を設定します。
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); |
次の例では、HTTP セッションのタイムアウトを 5 分に設定します。
CALL sa_set_http_option('SessionTimeout', '5'); |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |