*メタ変数 -●・・・サーバーは必ず提供''しなければならない''。 -◎・・・サーバーは提供する''べき''である。 -○・・・定義されている。(提供しても''よい''。) 1.1 1.2 名前 ◎ [[AUTH_TYPE]] ● [[CONTENT_LENGTH]] ● [[CONTENT_TYPE]] ● [[GATEWAY_INTERFACE]] ◎ [[HTTP_*]] ● [[PATH_INFO]] ○ [[PATH_TRANSLATED]] ● [[QUERY_STRING]] ● [[REMOTE_ADDR]] ◎ [[REMOTE_HOST]] ○ [[REMOTE_IDENT]] ○ [[REMOTE_USER]] ● [[REQUEST_METHOD]] ● [[SCRIPT_NAME]] ● [[SERVER_NAME]] ● [[SERVER_PORT]] ● [[SERVER_PROTOCOL]] ● [[SERVER_SOFTWARE]] ○ [[X_*]] ※1.1 = draft 03, 1.2 = I-D になる前の原案。 サーバーはスクリプトにメタ変数を渡す方法を用意し''なければなりません''。 多くの実装では[[環境変数]]として渡されます。 [[CGI/1.1]]では、メタ変数値 null と値なしを区別しません。 どちらになるかは実装定義 (実装中では一貫している必要がある) です。 メタ変数名の大文字・小文字は区別しません。正統名は 大文字と「_」で構成されますが、実際の名前は処理系統定義です。 (メタ変数値の大文字・小文字の区別は変数により異なります。) *CGI 頭領域 (解析頭出力) 1.1 1.2 領域名 ○ [[Content-Type:領域]] ○ [[Location:領域]] ○ [[Status:欄]] ○ [[X-CGI-*:欄]] CGI 頭は、本体と空行で区切られます。継続行は認められていません。 CGI 頭欄と HTTP 頭欄は混在 (順番が) していても構いませんが、 CGI 頭欄を極力先に出力することが推奨されています。 CGI 頭欄はそれぞれ1回だけ使えます。一つの CGI 頭には、 最低1つの CGI 頭欄が必要です。つまり、上記の内1つは必ず 出力されるということです。 本体を出力する時は、[[Content-Type:領域]] を出力し''なければなりません''。 [[Location:領域]] を出力する時は、 HTTP 欄を出力し''てはいけません''。 *SEE ALSO -[[CGI/1.1]] -[[CGI/1.2]] -[[HTTP]] --[[HTTP/1.0]] --[[HTTP/1.1]] --[[NCSAのhttpd]] --[[Apache]] --[[Cookie]] -[[URI]] --[[URL]] -[[HTML]] -[[媒体型]] -[[MIME]] --[[MHTML]] -[[RFC822と仲間達の頭領域名]] -[[電子メイル]] -[[電子ニュース]] - [1] ''Common Gateway Interface - 1.1 *Draft 03*'' - [2] ''The Common Gateway Interface Specification'' (CGI/1.1) - [3] ''WWW Talk Jan 94-present'' CGI/1.1 の仕様策定 - [4] ''WWW Talk Oct 93-present'' CGI/1.0 の仕様策定 - [5] >>4 CGI/1.0 の仕様書って今は手に入らなさげなんですが、 CGI/1.1 との大きな違いは、 HTTP 頭欄が HTTP_* 環境変数で CGI script に渡されることと、 CGI script が出力した頭欄で CGI 頭欄でないものは HTTP 頭欄として HTTP UA に送られることみたいです。 - [6] よく、「CGI 環境変数の説明」などと称して、色々な[[環境変数]]の一覧を示している文書があります。そしてそのような文書にはたいてい、 [CODE[TZ]] のように''たまたまそのサーバーで設定されていた''だけの環境変数が載っていたりします。筆者がちゃんとわかっているかを判断する一つの材料となります。 - [7] また、 >>6 ほどではありませんが重要なポイントとして、一般的な CGI のめた変数と、 HTTP_[CODE[*]] のめた変数をきちんと区別して扱っているかも要注意でしょう。厳しいことを言えば、このメタ変数群と [[HTTP]] 頭欄の関係に全く触れていなければその時点で HTTP CGI の説明として失格です。 - [8] ''CGIのメカニズム (How a CGI Runs)'' - [9] [CODE(CGI)[SCRIPT_FILENAME]], [CODE(CGI)[REQUEST_URI]]: [[Apache]] 拡張 - [10] [CODE[[[DOCUMENT_ROOT]]]]: しばしば [CODE[CGI 環境変数]]として取り上げられますが、これは CGI のメタ変数ではありません。単なるサーバーが使用又は提供しているだけの変数です。 - [11] [CODE[環境変数はブラウザが送る]]と思っている人がいます。仕組みを知らない証拠です。 - [12] 変数 [CODE[[[SERVER_PORT_SECURE]]]] はおそらく [[HTTPS]] を使った時のものです。 CGI/1.1,1.2dらft には載っていませんが、サーバー独自拡張のメタ変数と考えても良い部類でしょう。 - [13] [CODE(CGI)[[[SERVER_ADMIN]]]]: 管理者のメイル・アドレス。非標準だけど [[Apache]] とかで普通に使われている。 - [14] よく [CODE[CGI 環境変数]]として取り上げられるが CGI とは関係のない (たまたま設定されているだけの) 変数: [CODE[[[PATH]]]], [CODE[[[TZ]]]], - [15] >>10 でも Apache がこの環境変数に依存しているとはおもえないから、 CGI script への情報提供として値を設定しているのかな、やっぱり。 - [16] [CODE(CGI)[[[REMOTE_PASSWORD]]]]: こんな (便利な) CGI の思想とは反する変数を与えるサーバーはどこのあほで巣かな?