HTTPリクエストの処理
4D Webサーバーは、HTTPリクエストを処理するための機能を複数備えています:
- Webアプリケーションのルーターとなる
On Web Connection
データベースメソッド。 - サーバーサイドコードを呼び出すための
/4DACTION
URL。 - サーバーに送信された HTMLオブジェクトから値を取得する
WEB GET VARIABLES
。 WEB GET HTTP BODY
、WEB GET HTTP HEADER
、WEB GET BODY PART
などのコマンドによって、リクエスト処理をカスタマイズすることができます (cookie 含む)。- 変数を宣言するための COMPILER_WEB プロジェクトメソッド。
On Web Connection
On Web Connection
データベースメソッドは、4D Webサーバーのエントリーポイントとして使用できます。
データベースメソッドの呼び出し
On Web Connection
データベースメソッドは、サーバー上に存在しないページへのパスをサーバーが URL として受け取った場合に、自動的に呼び出されます。 データベースメソッドは、URL とともに呼び出されます。
たとえば、"a/b/c" という URL はデータベースメソッドを呼び出しますが、WebFolder の "a/b" サブフォルダーに "c.html" というページが存在する場合、"a/b/c.html" はデータベースメソッドを呼び出しません。
このリクエストは、事前に
On Web Authentication
データベースメソッド (あれば) に受け入れられているべきで、Webサーバーも起動している必要があります。
シンタックス
On Web Connection( $1 : Text ; $2 : Text ; $3 : Text ; $4 : Text ; $5 : Text ; $6 : Text )
引数 | 型 | 説明 | |
---|---|---|---|
$1 | Text | <- | URL |
$2 | Text | <- | HTTPヘッダー + HTTPボディ (32 KBまで) |
$3 | Text | <- | Webクライアント (ブラウザー) の IPアドレス |
$4 | Text | <- | サーバーの IPアドレス |
$5 | Text | <- | ユーザー名 |
$6 | Text | <- | パスワード |
これらの引数を以下のように宣言しなければなりません:
// On Web Connection データベースメソッド
C_TEXT($1;$2;$3;$4;$5;$6)
// メソッドのコード
あるいは、名前付き引数 シンタックスを利用することもできます:
// On Web Connection データベースメソッド
#DECLARE ($url : Text; $header : Text; \
$BrowserIP : Text; $ServerIP : Text; \
$user : Text; $password : Text)
インターフェース要素 を表示する 4Dコマンド (
DIALOG
、ALERT
など) の呼び出しは許可されず、メソッドの処理を終了します。
$1 - URL追加データ
最初の引数 ($1) は、ユーザーが Webブラウザーのアドレスエリアに入力した URL からホストのアドレスを取り除いたものです。
イントラネット接続の場合を見てみましょう。 4D Webサーバーマシンの IPアドレスを 123.4.567.89 とします。 以下の表は Webブラウザーに入力された URL に対して、$1 が受け取る値を示しています:
Webブラウザーに入力された値 | $1 の値 |
---|---|
123.4.567.89 | / |
http://123.45.67.89 | / |
123.4.567.89/Customers | /Customers |
http://123.45.67.89/Customers/Add | /Customers/Add |
123.4.567.89/Do_This/If_OK/Do_That | /Do_This/If_OK/Do_That |
この引数は必要に応じて自由に利用できます。 4D は単に URL のホスト部より後の部分を無視し、$1 に渡します。 たとえば、値 "/Customers/Add" が "[Customers]
テーブルに新規レコードを直接追加する" ということを意味するような、オリジナルのルールを作成できます。 利用可能な値やデフォルトブックマークを Webユーザーに提供することで、アプリケーションの異なる部分へのショートカットを提供できます。 このようにして、Webユーザーは新しく接続するたびにナビゲーションを通過することなく、素早く Webサイトのリソースにアクセスできます。
$2 - HTTPリクエストのヘッダーとボディ
二番目の引数 ($2) は、Webブラウザーから送信された HTTPリクエストのヘッダーとボディです。 この情報は On Web Connection
データベースメソッドに "そのまま" 渡されることに留意してください。 その内容は、接続を試みた Webブラウザーの仕様により異なります。
アプリケーションでこの情報を使用するには、開発者がヘッダーとボディを解析しなければなりません。 WEB GET HTTP HEADER
や WEB GET HTTP BODY
コマンドを使うことができます。
パフォーマンス上の理由により、$2 を 介して渡されるデータのサイズは 32KB 以下でなくてはなりません。 これを超過する分は、4D HTTPサーバーにより切り取られます。
$3 - Webクライアントの IPアドレス
$3 引数はブラウザーマシンの IPアドレスを受け取ります。 この情報を使用して、イントラネットアクセスとインターネットアクセスを区別できます。
4D は IPv4 アドレスを、96-bit の接頭辞付きのハイブリッド型 IPv6/IPv4 フォーマットで返します。たとえば、::ffff:192.168.2.34 は、192.168.2.34 という IPv4 アドレスを意味します。 詳細については、IPv6 のサポートについて の章を参照ください。
$4 - サーバー IPアドレス
$4 引数は 4D Webサーバーによってリクエストされた IPアドレスを受け取ります。 4D はマルチホーミングをサポートしており、複数の IPアドレスを持つマシンを使用できます。 詳細は 設定ページ を参照ください。
$5 と $6 - ユーザー名とパスワード
$5
と $6
引数は、ブラウザーが表示する標準の認証ダイアログにユーザーが入力したユーザー名とパスワードを受け取ります (入力されていれば; 認証ページ 参照)。
ブラウザーから送信されたユーザー名が 4D に存在する場合、$6 引数 (ユーザーパスワード) はセキュリティのため渡されません。
/4DACTION
**/4DACTION/**MethodName
**/4DACTION/**MethodName/Param
引数 | 型 | 説明 | |
---|---|---|---|
MethodName | Text | -> | 実行する 4Dプロジェクトメソッド名 |
Param | Text | -> | プロジェクトメソッドに渡されるテキスト引数 |
利用法: URL またはフォームアクション
この URL を使用して、任意の Param テキスト引数とともに MethodName に指定した 4Dプロジェクトメソッドを呼び出すことができます。 このメソッドは引数を $1 に受け取ります。
- 4Dプロジェクトメソッドは、Webリクエスト用に許可されていなければなりません。メソッドのプロパティで "公開オプション: 4DタグとURL(4DACTION...)" 属性がチェックされている必要があります。 属性がチェックされていない場合、Webリクエストは拒否されます。
/4DACTION/MyMethod/Param
リクエストを受け取ると、4D はOn Web Authentication
データベースメソッド (あれば) を呼び出します。
4DACTION/
は、スタティックな Webページの URL に割り当てることもできます:
<A HREF="/4DACTION/MyMethod/hello">Do Something</A>
MyMethod
プロジェクトメソッドは通常レスポンスを返すべきです (WEB SEND FILE
や WEB SEND BLOB
で HTMLページを送信するなど)。 ブラウザーをブロックしないように、処理は可能な限り短時間でおこなわれるようにします。
4DACTION/
から呼び出されるメソッドは、インタフェース要素 (DIALOG
,ALERT
など) を呼び出してはいけません。
例題
この例題は、HTMLピクチャーオブジェクトに /4DACTION/
URL を割り当て、ページ上でピクチャーを動的に表示する方法を説明しています。 スタティック HTMLページに以下のコードを記述します:
<IMG SRC="/4DACTION/getPhoto/smith">
getPhoto
メソッドは以下のとおりです:
C_TEXT($1) // この引数は常に宣言する必要があります
var $path : Text
var $PictVar : Picture
var $BlobVar : Blob
// Resources フォルダー内の Images フォルダー内でピクチャーを探します
$path:=Get 4D folder(Current resources folder)+"Images"+Folder separator+$1+".psd"
READ PICTURE FILE($path;$PictVar) // ピクチャーをピクチャー変数に入れます
PICTURE TO BLOB($PictVar;$BLOB;".png") // ピクチャーを ".png" 形式に変換します
WEB SEND BLOB($BLOB;"image/png")