[13] [DFN[[[Script-URI]]]] は、 [[CGI]] の[[メタ変数]]から決定できる、当該[[要求]]の [[URL]] です。最も単純な場合には[[クライアント]]が[[要求]]した [[URL]] ([CODE[[[Request-URI]]]]) と一致しますが、[[トランスポート層プロトコル]]によっては、あるいは[[鯖]]内での [[URL]] の書き換え処理等によってはそれと異なる値となることもあります。 * 仕様書 [REFS[ - [1] [CITE@en[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1]] -- [2] -- [9] '''''' ]REFS] * 定義 [11] [DFN[script-URI]] は次のように定義されています [SRC[>>9]]。 [PRE(ABNF code)[ script-URI = "://" ":" "?" ]PRE] - [CODE(ABNF)@en[]] は [CODE(CGI)@en[[[SERVER_PROTOCOL]]]] から決まる値 - [CODE(ABNF)@en[]] は [CODE(CGI)@en[[[SERVER_NAME]]]] の値 - [CODE(ABNF)@en[]] は [CODE(CGI)@en[[[SERVER_PORT]]]] の値 - [CODE(ABNF)@en[]] は [CODE(CGI)@en[[[SCRIPT_NAME]]]] は [CODE(URI)@en[[[;]]]], [CODE(URI)@en[[[=]]]], [CODE(URI)@en[[[?]]]] を[[予約]]して[[パーセント符号化]]した値 - [CODE(ABNF)@en[]] は [CODE(CGI)@en[[[PATH_INFO]]]] は [CODE(URI)@en[[[;]]]], [CODE(URI)@en[[[=]]]], [CODE(URI)@en[[[?]]]] を[[予約]]して[[パーセント符号化]]した値 - [CODE(ABNF)@en[]] は [CODE(CGI)@en[[[QUERY_STRING]]]] の値 [12] [[URL scheme]] は [[CGI/1.1]] [[RFC]] の範囲内の[[メタ変数]]では決定できません。 [[HTTP]] の場合、純粋な [[HTTP]] ([CODE(URI)@en[[[http:]]]]) と [[TLS]] 上の [[HTTP]] ([CODE(URI)@en[[[https:]]]]) を区別する方法がありません。 [[CGIスクリプト]]は [[URL scheme]] 依存の[[メタ変数]]を使ってこれを推定しても[['''構いません''']] [SRC[>>9]]。 * URL scheme [3] [[CGI]] 仕様は [[URL scheme]] を特に限定していません。 [4] ただし[[非階層的URL scheme]]の対応は適用範囲外とされています [SRC[>>2]]。 * 処理モデル ** スクリプトの選択 [5] [[鯖]]は、 [[path]] の一部または全部により、実行する [[CGIスクリプト]]を選択します。 [6] この選択の方法は[[鯖]]に委ねられており、 [[path]] の全部を[[ファイル・システム]]に写像する場合もあるでしょうし、 どんな [[path]] であろうと特定の[[CGIスクリプト]]に写像する場合もあるでしょう。 [7] いずれにせよ、 [[path]] のある部分が [[CGIスクリプト]]を識別する時、 [[path]] の残った部分があれば、それは[[CGIスクリプト]]によって解釈されることになります。 [SRC[>>2]] ** Request-URI と Script-URI [8] [[鯖]]は[[クライアント]]から[[要求]]があった [[URL]] の情報を[[メタ変数]]として設定して [[CGIスクリプト]]に渡します。この時、元々の [[URL]] から直接導き出される値を設定しなければならないわけではなく、 実装と設定に応じて適当に書き換えた値であっても構いません。 複数の [[path]] が特定の [[CGIスクリプト]]に対応付けされているような場合に、 元々の [[URL]] を使ってもいいですし、正規形にした [[URL]] を使ってもいいですし、 その他適当な方法で導かれた [[URL]] を使っても良いのです。 [SRC[>>9]] [10] いずれにせよ、 [[Script-URI]] は、それにアクセスすると同じ [CODE(CGI)@en[[[SCRIPT_NAME]]]], [CODE(CGI)@en[[[PATH_INFO]]]], [CODE(CGI)@en[[[QUERY_STRING]]]] で同じ[[CGIスクリプト]]が実行されるようなもの [WEAK[(になるよう変形されているの)]] で[['''なければなりません''']]。 [SRC[>>9]] * 関連 [14] [[メタ変数]] [CODE(CGI)@en[[[REQUEST_URI]]]] は [[Script-URI]] で行われるような書き換えと分解の処理を経ていない、元々[[要求]]された [[URL]] が入っています。こちらの方が正確でより使い勝手が良い場面も多いです。 ただし、 [[host]] が含まれるか否かなど、[[クライアント]]の[[要求]]の方法によって得られる値が変わってくることもあり、 [[鯖]]によって正規化されている [[Script-URI]] に比べて取り扱いに注意が必要です。