[1] [[CGI]] の[DFN[メタ変数]] (metavariable(s)) は、 [[サーバー]]から[[スクリプト]]に情報を提供するために使用されます。 [2] [NCSA] では[[環境変数]]とされていましたが、 [COAR] では CGI の普及を反映して、 より汎用的にメタ変数と呼んでいます。 [[Un|x]] や [[Windoze]] のような環境で、 [[Apache]] や [[IIS]] などを使っている場合など、 ほとんどの場合においてはメタ変数の手段として環境変数が使われますから、 現在でも環境変数で情報を伝えていると表現することは間違いではありませんが、 特に実装に依存した話をする場合以外は [COAR] を尊重してメタ変数と呼ぶのがよいとおもいます。 [[RFC3050]] もメタ変数と呼んでいます。 [3] メタ変数は、サーバーから CGI スクリプトへの情報伝達にのみ使われます。 変数の値を変更しても、サーバーの動作などに影響は出ません。 (メタ変数の手段によっては変更すること自体できないかもしれません。) [4] メタ変数の値が長さ1以上でない場合には、 「長さ0の(空)文字列」が設定されている場合 ([CODE(CGI)[NULL]] という。) と値が設定されていない (未定義である) 場合があります。 HTTP CGI では歴史的に両者を基本的には区別しませんが、 SIP CGI ではその区別を要求しています。 HTTP CGI であっても、 [CODE(CGI)[NULL]] と値なしは 「実装依存」であって、 適当でよいわけではありません。 例えばサーバーはある時 [CODE(CGI)[QUERY_STRING]] が [7] メタ変数: - ●・・・サーバーは必ず提供''しなければならない''。 (場合によってはしなければならない、を含む。) - ◎・・・サーバーは提供する''べき''である。 - ○・・・定義されている。(提供しても''よい''。) ,1.1 ,SIP ,名前 ,実装 , , ,[[ALL_HTTP]] , , ,[CODE(CGI)[[[ALL_RAW]]]] , , ,[[API_VERSION]] ,[Apache]? , , ,[[AUTH_PASS]] , , ,[CODE(CGI)[[[AUTH_PASSWORD]]]] ,◎ ,● ,[[AUTH_TYPE]] , , , ,[[AUTH_USER]] , , ,[CODE(CGI)[[[CERT_COOKIE]]]] , , ,[CODE(CGI)[[[CERT_FLAGS]]]] , , ,[CODE(CGI)[[[CERT_ISSUER]]]] , , ,[CODE(CGI)[[[CERT_KEYSIZE]]]] , , ,[CODE(CGI)[[[CERT_SECRETKEYSIZE]]]] , , ,[CODE(CGI)[[[CERT_SERIALNUMBER]]]] , , ,[CODE(CGI)[[[CERT_SERVER_ISSUER]]]] , , ,[CODE(CGI)[[[CERT_SERVER_SUBJECT]]]] , , ,[CODE(CGI)[[[CERT_SUBJECT]]]] , , ,[CODE(CGI)[[[CHARSET]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[CHARSET_DETERMINED_BY]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[CHARSET_HTTP_METHOD]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[CHARSET_NOREDIRECT]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[CHARSET_SERVER_NAME]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[CHARSET_SERVER_PORT]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[CLIENT_CERT_ENCODING]]]] ,● ,● ,[CODE(CGI)[[[CONTENT_LENGTH]]]] ,● ,● ,[CODE(CGI)[[[CONTENT_TYPE]]]] , , ,[CODE(CGI)[[[DATE_GMT]]]] ,[SSI] , , ,[CODE(CGI)[[[DATE_LOCAL]]]] ,[SSI] , , ,[CODE(CGI)[[[DOCUMENT_NAME]]]] ,[SSI] , , ,[CODE(CGI)[[[DOCUMENT_PATH_INFO]]]] ,[SSI] , , ,[CODE(CGI)[[[DOCUMENT_ROOT]]]] ,[Apache] , , ,[CODE(CGI)[[[DOCUMENT_URI]]]] ,[SSI] , , ,[CODE(CGI)[[[DOCUMENT_URL]]]] , , , ,[CODE(CGI)[[[FCGI_DATA_LENGTH]]]] ,[FastCGI] , , ,[[FCGI_LISTEN_QUEUE]] ,[FastCGI] , , ,[[FCGI_PROCESS_ID]] ,[FastCGI] , , ,[CODE(CGI)[[[FCGI_ROLE]]]] ,[FastCGI] , , ,[CODE(CGI)[[[FCGI_SOCKET_PATH]]]] ,[FastCGI] , , ,[CODE(CGI)[[[FILE_LAST_MOD]]]] ,[FastCGI] , , ,[CODE(CGI)[[[FORCE_CHARSET]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[FORCE_SOURCE_CHARSET]]]] ,[Russian Apache] ,● ,● ,[CODE(CGI)[[[GATEWAY_INTERFACE]]]] ,◎ , ,[CODE(CGI)[[[HTTP_*]]]] , , ,[[HTTPS]] ,[Apache] ,◎ , ,[CODE(CGI)[[[HTTPS_*]]]] , , ,[CODE(CGI)[[[HTTPS_KEYSIZE]]]] , , ,[CODE(CGI)[[[HTTPS_SECRETKEYSIZE]]]] , , ,[CODE(CGI)[[[HTTPS_SERVER_ISSUER]]]] , , ,[CODE(CGI)[[[HTTPS_SERVER_SUBJECT]]]] , , ,[CODE(CGI)[[[INSTANCE_ID]]]] , , ,[CODE(CGI)[[[IS_SUBREQ]]]] ,[Apache]? , , ,[CODE(CGI)[[[LAST_MODIFIED]]]] ,[SSI] , , ,[CODE(CGI)[[[LOCAL_ADDR]]]] , , ,[CODE(CGI)[[[LOCAL_COOKIE]]]] ,[w3m] 廃止 , , ,[CODE(CGI)[[[LOCAL_COOKIE_FILE]]]] ,[w3m] , , ,[CODE(CGI)[[[MOD_PERL]]]] ,[mod_perl] ,● , ,[CODE(CGI)[[[PATH_INFO]]]] ,○ , ,[[PATH_TRANSLATED]] , , ,[[PERL_SEND_HEADER]] ,[mod_perl] ,● , ,[[QUERY_STRING]] , , ,[[QUERY_STRING_UNESCAPED]] ,[SSI] , , ,[CODE(CGI)[[[REDIRECT_ERROR_NOTES]]]] ,[Apache] , , ,[CODE(CGI)[[[REDIRECT_FORCE_CHARSET]]]] ,[Russian Apache] , , ,[CODE(CGI)[[[REDIRECT_FORCE_CHARSET_CHARSET]]]] ,[Russian Apache] , , ,[[REDIRECT_PATH]] ,* , , ,[CODE(CGI)[[[REDIRECT_REQUEST_METHOD]]]] ,[Apache] , , ,[[REDIRECT_QUERY_STRING]] ,* , , ,[CODE(CGI)[[[REDIRECT_SCRIPT_URI]]]] ,[Apache] , , ,[CODE(CGI)[[[REDIRECT_SCRIPT_URL]]]] ,[Apache] , , ,[[REDIRECT_STATUS]] ,[Apache]* , , ,[[REDIRECT_URL]] ,[Apache]* , ,?? ,[[REGISTRATIONS]] ,● ,● ,[[REMOTE_ADDR]] ,◎ ,◎ ,[[REMOTE_HOST]] ,○ ,○ ,[[REMOTE_IDENT]] , , ,[[REMOTE_PASSWORD]] , , ,[[REMOTE_PORT]] ,[Apache] ,○ ,◎ ,[[REMOTE_USER]] , , ,[[REQUEST_FILENAME]] ,[Apache]? ,● ,● ,[[REQUEST_METHOD]] , , ,[[REQUEST_SCHEME]] ,[Apache]? , ,?? ,[[REQUEST_TOKEN]] , ,● ,[[REQUEST_URI]] ,[Apache] など , ,● ,[[RESPONSE_REASON]] , ,?? ,[[RESPONSE_STATUS]] , ,?? ,[[RESPONSE_TOKEN]] , , ,[CODE(CGI)[[[ROOT]]]] , ,?? ,[[SCRIPT_COOKIE]] , , ,[CODE(CGI)[[[SCRIPT_DIRECTORY]]]] ,[Protozilla] , , ,[[SCRIPT_FILENAME]] ,[Apache] など ,● , ,[[SCRIPT_NAME]] , , ,[CODE(CGI)[[[SCRIPT_URI]]]] ,[Apache] , , ,[CODE(CGI)[[[SCRIPT_URL]]]] ,[Apache] , , ,[[SERVER_ADDR]] , , ,[[SERVER_ADMIN]] ,[Apache] ,● ,● ,[[SERVER_NAME]] ,● ,● ,[[SERVER_PORT]] , , ,[[SERVER_PORT_SECURE]] ,● ,● ,[[SERVER_PROTOCOL]] , , ,[[SERVER_SIGNATURE]] ,[Apache] ,● ,● ,[[SERVER_SOFTWARE]] , , ,[CODE(CGI)[[[SERVER_URL]]]] ,[Netscape] , ,◎ ,[[SIP_*]] , , ,[CODE(CGI)[[[SOURCE_CHARSET]]]] ,[Russian Apache] , , ,[[SSL_CIPHER]] ,[Apache] , , ,[[SSL_CIPHER_ALGKEYSIZE]] ,[Apache] , , ,[[SSL_CIPHER_EXPORT]] ,[Apache] , , ,[[SSL_CIPHER_USEKEYSIZE]] ,[Apache] , , ,[[SSL_CLIENT_A_KEY]] ,[Apache] , , ,[[SSL_CLIENT_A_SIG]] ,[Apache] , , ,[[SSL_CLIENT_CERT]] ,[Apache] , , ,[[SSL_CLIENT_CERT_CHAINn]] ,[Apache] , , ,[[SSL_CLIENT_I_DN]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_C]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_CN]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_D]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_Email]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_G]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_I]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_L]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_O]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_OU]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_S]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_ST]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_T]] ,[Apache] , , ,[[SSL_CLIENT_I_DN_UID]] ,[Apache] , , ,[[SSL_CLIENT_M_SERIAL]] ,[Apache] , , ,[[SSL_CLIENT_M_VERSION]] ,[Apache] , , ,[[SSL_CLIENT_S_DN]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_C]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_CN]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_D]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_Email]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_G]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_I]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_L]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_O]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_OU]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_S]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_ST]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_T]] ,[Apache] , , ,[[SSL_CLIENT_S_DN_UID]] ,[Apache] , , ,[[SSL_CLIENT_V_END]] ,[Apache] , , ,[[SSL_CLIENT_V_START]] ,[Apache] , , ,[[SSL_CLIENT_VERIFY]] ,[Apache] , , ,[[SSL_PROTOCOL]] ,[Apache] , , ,[[SSL_SERVER_A_KEY]] ,[Apache] , , ,[[SSL_SERVER_A_SIG]] ,[Apache] , , ,[[SSL_SERVER_CERT]] ,[Apache] , , ,[[SSL_SERVER_I_DN]] ,[Apache] , , ,[[SSL_SERVER_I_DN_C]] ,[Apache] , , ,[[SSL_SERVER_I_DN_CN]] ,[Apache] , , ,[[SSL_SERVER_I_DN_D]] ,[Apache] , , ,[[SSL_SERVER_I_DN_Email]] ,[Apache] , , ,[[SSL_SERVER_I_DN_G]] ,[Apache] , , ,[[SSL_SERVER_I_DN_I]] ,[Apache] , , ,[[SSL_SERVER_I_DN_L]] ,[Apache] , , ,[[SSL_SERVER_I_DN_O]] ,[Apache] , , ,[[SSL_SERVER_I_DN_OU]] ,[Apache] , , ,[[SSL_SERVER_I_DN_S]] ,[Apache] , , ,[[SSL_SERVER_I_DN_ST]] ,[Apache] , , ,[[SSL_SERVER_I_DN_T]] ,[Apache] , , ,[[SSL_SERVER_I_DN_UID]] ,[Apache] , , ,[[SSL_SERVER_M_SERIAL]] ,[Apache] , , ,[[SSL_SERVER_M_VERSION]] ,[Apache] , , ,[[SSL_SERVER_S_DN]] ,[Apache] , , ,[[SSL_SERVER_S_DN_C]] ,[Apache] , , ,[[SSL_SERVER_S_DN_CN]] ,[Apache] , , ,[[SSL_SERVER_S_DN_D]] ,[Apache] , , ,[[SSL_SERVER_S_DN_Email]] ,[Apache] , , ,[[SSL_SERVER_S_DN_G]] ,[Apache] , , ,[[SSL_SERVER_S_DN_I]] ,[Apache] , , ,[[SSL_SERVER_S_DN_L]] ,[Apache] , , ,[[SSL_SERVER_S_DN_O]] ,[Apache] , , ,[[SSL_SERVER_S_DN_OU]] ,[Apache] , , ,[[SSL_SERVER_S_DN_S]] ,[Apache] , , ,[[SSL_SERVER_S_DN_ST]] ,[Apache] , , ,[[SSL_SERVER_S_DN_T]] ,[Apache] , , ,[[SSL_SERVER_S_DN_UID]] ,[Apache] , , ,[[SSL_SERVER_V_END]] ,[Apache] , , ,[[SSL_SERVER_V_START]] ,[Apache] , , ,[[SSL_SESSION_ID]] ,[Apache] , , ,[[SSL_VERSION]] , , ,[[SSL_VERSION_INTERFACE]] ,[Apache]? , , ,[[SSL_VERSION_LIBRARY]] ,[Apache] , , ,[[THE_REQUEST]] ,[Apache]? , , ,[[TIME]] ,[Apache]? , , ,[[TIME_DAY]] ,[Apache]? , , ,[[TIME_HOUR]] ,[Apache]? , , ,[[TIME_MIN]] ,[Apache]? , , ,[[TIME_MON]] ,[Apache]? , , ,[[TIME_SEC]] ,[Apache]? , , ,[[TIME_YEAR]] ,[Apache]? , , ,[CODE(CGI)[[[URI_DATA]]]] ,[Protozilla] , , ,[CODE(CGI)[[[URI_HOST]]]] ,[Protozilla] , , ,[CODE(CGI)[[[URI_POST]]]] ,[Protozilla] , , ,[CODE(CGI)[[[URI_SPEC]]]] ,[Protozilla] , , ,[[URL]] , , ,[[USER_NAME]] ,[Apache]* , , ,[[W3M_*]] ,[w3m]* ,○ , ,[[X_*]] , , ,[[X_IS_PRIVATE_ADDR]] ,[Apache] - 1.1 == HTTP CGI/1.1 - SIP == SIP-CGI/1.1 - [SSI] == SSI (参考) - [Apache]* == Apache (CGI とは直接関係ない機能) - [Apache]? == CGI スクリプトや SSI で利用可能であることが確認できないもの (設定ファイルなどの処理中のみ使用可能??) - [mod_perl] == [[mod_perl]] で CGI を使ったときに得られるもの (参考までに) - [Protozilla] == [[Protozilla]] の [CODE(URI)[[[cgi+]]:]] scheme を使った CGI スクリプト呼び出し - [Russian Apache] == 露西亜語版 Apache 。表には、 CGI 専用でない変数を含む。 - ''Servertec - Common Gateway Interface (CGI)'' - [w3m] == w3m [[LocalCGI]] [21] サーバーはスクリプトにメタ変数を渡す方法を用意し''なければなりません''。 多くの実装では[[環境変数]]として渡されます。 [22] メタ変数名の大文字・小文字は区別しません。正統名は 大文字と「_」で構成されますが、実際の名前は処理系統定義です。 (メタ変数値の大文字・小文字の区別は変数により異なります。) [18] [[WinCGI]] では[[INIファイル]]を使ってメタ変数を渡していたそうです。 (INI のファイル名は CGI スクリプトの第1引数となります。) (WinCGI が他の点でちゃんと CGI に適合するのかは知りませんが。) [24] http://glidernet.us [url=竧ttp://glidernet.us]http://glidernet.us[/url] ([[glidernet]] [glidernet@gmail.us]) [25] http://hair.max.io/ hair acessories hair healthy [url=http://hair.max.io/]hair acessories[/url] ([[hair acessories]] [WEAK[2007-11-10 04:31:02 +00:00]]) [26] http://medlem.spray.se/gektor/ [PRE[ plus size [url=http://medlem.spray.se/gektor/]plus size[/url] ([[plus size]] [WEAK[2007-12-23 13:15:45 +00:00]]) ]PRE] [27] TLS4zz guzyjtqzkily, [url=http://nivvsgsoucit.com/]nivvsgsoucit[/url], [link=http://mbplxgefmjmq.com/]mbplxgefmjmq[/link], http://ougymepqhbjn.com/ ([[qhtqpgc]] [izxpgr@ebndht.com] [WEAK[2008-04-20 01:35:22 +00:00]]) [28] TLS4zz guzyjtqzkily, [url=http://nivvsgsoucit.com/]nivvsgsoucit[/url], [link=http://mbplxgefmjmq.com/]mbplxgefmjmq[/link], http://ougymepqhbjn.com/ ([[qhtqpgc]] [izxpgr@ebndht.com] [WEAK[2008-04-20 01:35:34 +00:00]]) [29] TLS4zz guzyjtqzkily, [url=http://nivvsgsoucit.com/]nivvsgsoucit[/url], [link=http://mbplxgefmjmq.com/]mbplxgefmjmq[/link], http://ougymepqhbjn.com/ ([[qhtqpgc]] [izxpgr@ebndht.com] [WEAK[2008-04-20 01:35:44 +00:00]]) [30] testyourself [url=http://test.com]testyourself[/url] testyourself [url= http://test.com ] testyourself [/url] ([[testyourself]] [rubamhhbhead@gmail.com] [WEAK[2008-05-18 20:13:47 +00:00]]) [[#comment]] * これは CGI メタ変数ではない! [14] よく [CODE[CGI 環境変数]]として取り上げられるが CGI とは関係のない (たまたま設定されているだけの) 変数: - [CODE[[[COMSPEC]]]] - [CODE[[[HOME]]]] - [CODE[[[PATH]]]] - [CODE[[[PWD]]]] - [CODE[[[TZ]]]] - [CODE[[[USER]]]] [15] こういうのを CGI 環境変数として挙げているような解説は参考にしない方が身のためです。 - [23] しかし、 >>14 のような、 HTTP 鯖とまったく関係ない変数は別として、実際問題、 HTTP 鯖ソフトウェアが設定する環境変数が CGI メタ変数 (独自拡張を含む。) の実装なのか、鯖の別の機能の実装 (がたまたま CGI スクリプトから利用できるだけ) なのか、区別がつきませんよね。 CGI と関係のない鯖の機能で実装されているなら CGI メタ変数ではないと言うこともできるし、 CGI スクリプトから利用できる (している) 以上 CGI メタ変数だとも言える。その辺は結局言葉遊びというか、定義の問題になってしまうのか。。。 どうしようもないので >>7 の表ではかなり定義を曖昧に、広い範囲の環境変数を広義の CGI メタ変数として含めています。 SSI の変数なんて CGI とは関係ないとはいえ、 SSI からの CGI スクリプト呼出しでは現実に同じ名前空間に存在しているわけですし、別の鯖の実装では普通に (SSI 経由でなくても) CGI スクリプトから利用できたりするから、 CGI メタ変数であるかどうかの判断なんてもうどうでもよくなってしまう。 [[#comment]] * 実装仕様書の類 - [17] Apache の環境変数 。 Apache では挙動の制御に環境変数が使われますが、 CGI の環境変数群が CGI 以外の場面でもしばしば使用出来ます。 - [19] [[Wyvern]] : ''環境変数設定モジュール'' - [20] ''mod_ssl - Apache HTTP Server'' [[#comment]] * CGI の肝はメタ変数。メタ変数の説明次第で CGI 解説文がトンデモかどうか判断できる。 - [6] よく、「CGI 環境変数の説明」などと称して、色々な[[環境変数]]の一覧を示している文書があります。そしてそのような文書にはたいてい、 [CODE[TZ]] のように''たまたまそのサーバーで設定されていた''だけの環境変数が載っていたりします。筆者がちゃんとわかっているかを判断する一つの材料となります。 - [7] また、 >>6 ほどではありませんが重要なポイントとして、一般的な CGI のめた変数と、 HTTP_[CODE[*]] のめた変数をきちんと区別して扱っているかも要注意でしょう。厳しいことを言えば、このメタ変数群と [[HTTP]] 頭欄の関係に全く触れていなければその時点で HTTP CGI の説明として失格です。 - [11] [CODE[環境変数はブラウザが送る]]と思っている人がいます。仕組みを知らない証拠です。 [[#comment]] * memo [31] [CITE[mod_rewrite - shima111の日記]] ([TIME[2009-01-27 18:16:17 +09:00]] 版) [32] [CITE@en[mod_ssl - Apache HTTP Server]] ([TIME[2009-10-15 04:32:44 +09:00]] 版) [33] [CITE@en[mod_rewrite - Apache HTTP Server]] ([TIME[2009-10-04 03:10:27 +09:00]] 版)