受信要求のルーティング
HTTP Server API は、受信要求を受信するアプリケーションを決定するためのルーティング データベースを保持します。 ルーティング テーブルは予約データベースから作成され、予約エントリと現在の登録が含まれます。 登録または予約が行われると、次のようにホストの種類に対応するルーティング データベース バケットに配置されます。
+ : ポート登録は "強力なワイルドカード" バケットに配置されます
host : ポート登録は "Explicit" バケットに配置されます
IP: ポート登録は "IP バインドの弱いワイルドカード" バケットに配置されます
* : ポートの登録は、"弱いワイルドカード" バケットに配置されます
これらの手順では、受信 HTTP 要求が処理される順序も参照します。 最初に強力なワイルドカード予約が確認され、その後に明示的な予約がチェックされ、その後に IP バインドの弱いワイルドカードと弱いワイルドカードが続きます。 一致が見つかると検索が停止し、残りのバケットの登録が見つからないようにします。
HTTP Server API ルーティング アルゴリズムは、ルーティング データベースの登録エントリと予約エントリの両方を検索し、強力なワイルドカード バケットから始まり、弱いワイルドカード バケットで終わることで、 UrlPrefix に最適な一致を見つけます。 バケット内の最適な一致は、UrlPrefix の相対 URI 部分の最長一致です (URL のホスト、ポート、スキームの部分と完全に一致すると仮定します)。 バケットで一致するものが見つかった後、ルーティング アルゴリズムは検索を停止し、優先順位の低いバケットをすべてスキップします。
たとえば、次の登録について考えてみましょう (バケットの種類に基づいて優先順位の降順で一覧表示されます)。
登録:
https://+:80/vroot/
アプリケーション 1 によって登録されます登録:
https://adatum.com:80/
アプリケーション 2 によって登録されます登録:
https://\*:80/
アプリケーション 3 によって登録されます
の受信要求 https://adatum.com:80/vroot/subdir/file.htm/
がアプリケーション 1 に配信されます。 の受信要求 https://adatum.com:80/default.htm/
は、アプリケーション 2 に配信されます。 の受信要求 https://otheradatum.com:80/file.htm/
がアプリケーション 3 に配信されます。
最適な一致が予約エントリの場合は、要求を受信する必要があるアプリケーションが実行されていないことを意味します。 たとえば、次の登録と予約について考えてみましょう。
登録:
https://\*:80/vroot/
アプリケーション 1 で登録され、ユーザー A予約:
https://adatum.com:80/
ユーザー B 用に予約されています
の受信要求 https://adatum.com:80/vroot/file.htm/
は、ユーザー B の予約エントリに最も一致するため、アプリケーション 1 に配信されません。優先順位規則は、優先順位が高い予約に適用されます。 承認され、受信した URL のサービス要求に登録されているプロセスがアクティブでない場合、要求は 400 状態コード (無効な要求) で拒否されます。