* 仕様書 [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]]