[13] Script-URI は、 CGI のメタ変数から決定できる、当該要求の URL
です。最も単純な場合にはクライアントが要求した URL (Request-URI
)
と一致しますが、トランスポート層プロトコルによっては、あるいは鯖内での URL
の書き換え処理等によってはそれと異なる値となることもあります。
[11] script-URI は次のように定義されています >>9。
script-URI = <scheme> "://" <server-name> ":" <server-port> <script-path> <extra-path> "?" <query-string>
<scheme>
は SERVER_PROTOCOL
から決まる値<server-name>
は SERVER_NAME
の値<server-port>
は SERVER_PORT
の値<script-path>
は SCRIPT_NAME
は
;
, =
, ?
を予約してパーセント符号化した値<extra-path>
は PATH_INFO
は
;
, =
, ?
を予約してパーセント符号化した値<query-string>
は QUERY_STRING
の値[12] URL scheme は CGI/1.1 RFC の範囲内のメタ変数では決定できません。
HTTP の場合、純粋な HTTP (http:
) と TLS 上の HTTP
(https:
) を区別する方法がありません。
CGIスクリプトは URL scheme 依存のメタ変数を使ってこれを推定しても構いません
>>9。
[3] CGI 仕様は URL scheme を特に限定していません。
[4] ただし非階層的URL schemeの対応は適用範囲外とされています >>2。
[5] 鯖は、 path の一部または全部により、実行する CGIスクリプトを選択します。
[6] この選択の方法は鯖に委ねられており、 path の全部をファイル・システムに写像する場合もあるでしょうし、 どんな path であろうと特定のCGIスクリプトに写像する場合もあるでしょう。
[7] いずれにせよ、 path のある部分が CGIスクリプトを識別する時、 path の残った部分があれば、それはCGIスクリプトによって解釈されることになります。 >>2
[8] 鯖はクライアントから要求があった URL の情報をメタ変数として設定して CGIスクリプトに渡します。この時、元々の URL から直接導き出される値を設定しなければならないわけではなく、 実装と設定に応じて適当に書き換えた値であっても構いません。 複数の path が特定の CGIスクリプトに対応付けされているような場合に、 元々の URL を使ってもいいですし、正規形にした URL を使ってもいいですし、 その他適当な方法で導かれた URL を使っても良いのです。 >>9
[10] いずれにせよ、 Script-URI は、それにアクセスすると同じ
SCRIPT_NAME
, PATH_INFO
,
QUERY_STRING
で同じCGIスクリプトが実行されるようなもの
(になるよう変形されているの) でなければなりません。 >>9
[15] SCRIPT_NAME
と PATH_INFO
は定義上パーセント復号されていることになっています。そのため Script-URI
を構成するにあたり再度パーセント符号化する必要が生じています。
しかしパーセント復号は不可逆なので、 Script-URI が大元の URL
と一致していない可能性があります。
[16] 元々の path に %25
が含まれていた場合、復号されたメタ変数では単独の
%
になっていて、再度パーセント符号化しないと URL としては不適切、
あるいは意味が変わってしまうおそれがありますが、 CGI の RFC
におけるパーセント符号化の定義が曖昧なためどうするのが正しいのかわかりません。
[17] 元々の path に非ASCII文字やオクテット列をパーセント符号化したものが含まれていた場合、
メタ変数には ASCII でないバイトが含まれることになります。
(これらのメタ変数は最終的に TEXT
を参照していて文字符号化はシステム定義になっていますが、利用可能な path を仕様上システムの文字符号化に制限していると解釈できるかもしれません。)
その場合どうパーセント符号化するべきかは、あまり明確に定義されていません。
[14] メタ変数 REQUEST_URI
は Script-URI
で行われるような書き換えと分解の処理を経ていない、元々要求された URL
が入っています。こちらの方が正確でより使い勝手が良い場面も多いです。
ただし、 host が含まれるか否かなど、クライアントの要求の方法によって得られる値が変わってくることもあり、
鯖によって正規化されている Script-URI に比べて取り扱いに注意が必要です。
[18] CGI におけるスクリプトURLは、HTTP における実効要求URL と実質的に同じものです。ただし、 HTTP 要求に含まれる URL を鯖内の処理の過程で変形などしているなら、 スクリプトURLは元の要求のURLとは直接関係ないものに変わっているかもしれませんから、 その場合スクリプトURLと実効要求URLは一致しません。