<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <dfn>CGI</dfn> は、
<code>Common Gateway Interface</code>
(共通関門界面) の略で、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor>
サーバーがスクリプトを実行してその結果を応答として返すための共通規格として
1993年に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.0</anchor> が、
1994年に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> (初版)
が策定されました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>側の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>構築技術の進化により、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
の伝統的な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子プロセス</anchor>としての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>実行は00年代以後廃れていきましたが、
かわって普及してきた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP鯖</anchor>と同一<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロセス</anchor>で実行される形の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>鯖の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WAF</anchor> の多くは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
から派生した形になっており、広義の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> は現在も広く用いられていると言えます。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 例えば <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WSGI</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ変数</anchor>を拡張する形で採用しています。</p></example><section><h1>CGI の版と派生仕様</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> には、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.0</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.2</anchor> の3つの版がありました。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.0</anchor> は初期の段階でのみ用いられました。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.2</anchor> は次世代版として企画されましたが、
完成に至りませんでした。実質的に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> が唯一用いられている版です。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">詳細は「歴史」の項を参照。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> は、事実上すべて <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor>で用いられています。
敢えて明確にするため <dfn>HTTP CGI</dfn> ということもあります。
かつては他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル</anchor>にも応用することが提案されており、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SIP</anchor> での利用方法が一応は仕様化されています (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SIP CGI</anchor>)。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">詳細は「歴史」の項を参照。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> 当初の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UNIX</anchor> 環境で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor>から別の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロセス</anchor>の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>を起動する形で実装されており、そのための <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IPC</anchor> 
の方法を規定するものでした。これが他の色々な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>に移植された他に、
性能の改善などの目的で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロセス</anchor>起動以外の方法でも実装されるようになりました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様</anchor>はそうした派生的な実装方法も含めた一般的な形で規定しつつ、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UNIX</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">POSIX</anchor>) と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AmigaDOS</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロセス</anchor>起動型の方法を定義していました。
ただ、派生実装はそれぞれの都合で元来の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の仕様をつまみ食いで踏襲する形になっており、
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> 仕様の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> 化がなかなか成らなかったこともあり)
それほど統一的に実装されているわけでもありません。また、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> = <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロセス</anchor>起動型
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>は遅いとして高速な代替手法であることを謳った技術も多く、
実質的に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の応用と言えるものであっても、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
を名乗っていないことも多いです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> ともかく、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> に基づく技術 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">束縛</anchor>とでもいうべき仕様や実装)
には、次のようなものがあります。</p><figure class="list short"><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロセス</anchor>起動型<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UNIX</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AmigaDOS</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Windows</anchor></li></ul></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SSI</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UNIX</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Windows</anchor></li></ul></li><li><code class="perl" xml:lang="en">HTTP::Request::AsCGI</code></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinCGI</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FastCGI</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SCGI</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WSGI</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Rack</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">jsgi</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PSGI</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local CGI</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">P6W</anchor></li></ul></figure></section><section><h1>CGI の構成要素</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <figure class="list middle"><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NPHスクリプト</anchor></li></ul></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI要求</anchor> (サーバーからスクリプトへ)<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIメタ変数</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求データ</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト命令行</anchor></li></ul></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI応答</anchor> (スクリプトからサーバーへ)<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書応答</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">局所リダイレクト応答</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアントリダイレクト応答</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NPH応答</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIヘッダー</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答本体</anchor></li></ul></li></ul></figure></p></section><section><h1>歴史</h1><section><h1>CGP</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <dfn>Common Gateway Protocol</dfn> (<dfn>CGP</dfn>) が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の考案当初の名称でした。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> EMail Msg &lt;9311180039.AA06991@void.ncsa.uiuc.edu&gt; <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.messages/515.html">http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.messages/515.html</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> Protocol ちゅーかむしろ Interface だろ、ってことで CGI という名前に変わった。</p></section><section><h1>CGI/1.0</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.0</anchor></dfn> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の最初の版です。
その後直ちに <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> となり、そちらが現在まで使われているため、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.0</anchor> の実装や応用は現在は残っていません。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <em>WWW Talk Oct 93-present</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.index.html">http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.index.html</anchor-external> CGI/1.0 の仕様策定</li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal> CGI/1.0 の仕様書って今は手に入らなさげなんですが、 CGI/1.1 との大きな違いは、 HTTP 頭欄が HTTP_* 環境変数で CGI script に渡されることと、 CGI script が出力した頭欄で CGI 頭欄でないものは HTTP 頭欄として HTTP UA に送られることみたいです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.messages/515.html">http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q4.messages/515.html</anchor-external>: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGP</anchor>/1.0 の最初の draft</p></section><section><h1>CGI/1.1</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor></dfn> は、現在使用されている <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の版です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.0</anchor> と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> がありますが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.0</anchor>
が開発された直後に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> に更新されました。また、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.2</anchor> の開発も行われたことがありますが、
完成には至らず、今後も新しい版の予定はありません。従って、現存するすべての <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
の実装は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> です。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> <cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3875</anchor> - The Common Gateway Interface (CGI) Version 1.1</cite> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc3875">https://tools.ietf.org/html/rfc3875</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> 元々 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NCSA</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">httpd</anchor> の機能として実装され、すぐに改訂されて <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor>
となりました。
長らく <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の正式な仕様は存在せず、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NCSA</anchor> のドキュメントが事実上の標準となっていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の仕様を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> 化しようとする動きは古くからありましたが、
中々進みませんでした。また、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ネットワーク</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル</anchor>ではなく<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>の内部の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">界面</anchor>に過ぎないこともあって、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> における標準化を疑問視する声もありました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 結局長年の停滞の末に2004年10月にようやく <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">情報提供RFC</anchor>として発行されました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> 標準不在の時代から様々な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>ソフトウェアが <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
の機能を実装していましたが、細かい動作の違いや独自の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ変数</anchor>の追加などがそれぞれで行われていました。
この状況は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> 化された後も続いています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> 現在では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fork</anchor> して <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>を起動する伝統的な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
の実装方法は旧式のものと考えられており、各言語の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ライブラリー</anchor>や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション・フレームワーク</anchor>、
あるいは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>がそれぞれ独自の方法で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖側Webアプリケーション</anchor>との情報のやり取りを行うのが一般的となっています。
しかし、そのような現代的な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor> も、多かれ少なかれ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> に影響を受けたものになっています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite>RFC Errata Report » RFC Editor</cite>, <time>2021-06-10T07:17:45.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/errata_search.php?rfc=3875&amp;rec_status=0">https://www.rfc-editor.org/errata_search.php?rfc=3875&amp;rec_status=0</anchor-external></p></section><section><h1>CGI/1.2</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.2</anchor></dfn> は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> 化と並行して進められていた <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
仕様の改訂案です。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Internet Draft</anchor> が発行されていましたが、結局 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor>
化されることなくプロジェクトが頓挫したようです。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite>Internet-Drafts Database Interface</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&amp;id=3150">https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&amp;id=3150</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.cs.huji.ac.il/course/2003/com1/rfc/draft-rfced-info-coar-00.txt">http://www.cs.huji.ac.il/course/2003/com1/rfc/draft-rfced-info-coar-00.txt</anchor-external></li></ul></refs></section><section><h1>SIP CGI</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SIP CGI</anchor></dfn> は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SIP</anchor> のための <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> CGI は当初からプロトコル独立を謳ってきました <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<anchor>Gopher</anchor> とかでも使えることを意図していました)</weak>
が、 HTTP 以外で実質的な実装があったのかは不明でした。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> それがようやく日の目をみたといえるのか、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP CGI</anchor>
とは別に、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SIP</anchor> で似たように働く
SIP CGI が <dfn>RFC 3050</dfn> (2001)
として制定されました。 (HTTP
CGI RFC がいつまで経ってもできないので痺れを切らして先に
RFC 化してしまったような感じです。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> 関連: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書の先行コピペ</anchor></p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <cite xml:lang="en">RFC 3050 - Common Gateway Interface for SIP</cite> (<time>2012-01-01 04:18:27 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc3050">https://tools.ietf.org/html/rfc3050</anchor-external></li></ul></refs></section></section><section><h1>メモ</h1><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> <cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3875</anchor> - The Common Gateway Interface (CGI) Version 1.1</cite> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc3875">http://tools.ietf.org/html/rfc3875</anchor-external></figcaption><blockquote><p><dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">共通関門界面<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">Common Gateway Interface</rt></rubyb></dfn> (<dfn>CGI</dfn>) は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">情報鯖</anchor>の元で外部の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プログラム</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ソフトウェア</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関門</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>独立な方法で実行するための、
簡単な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">界面</anchor>です。現在、対応している<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">情報鯖</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>です。</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> CGI/1.0 は歴史的なもので、
現在では既に影すらありません。
CGI/1.1 は、現代からみると曖昧な仕様であることと、
その後の時代の変化と現実の実装を反映する必要があることから、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> で再定義することを目指して
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Internet-Draft</anchor> が書かれていますが、
作業は遅々として進まず、
当分 I-D のままと思われます。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <em>Common Gateway Interface - 1.1 *Draft 03*</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html">http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <em>The Common Gateway Interface Specification</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">http://hoohoo.ncsa.uiuc.edu/cgi/interface.html</anchor-external> (CGI/1.1) </li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <em>WWW Talk Jan 94-present</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1994q1.index.html">http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1994q1.index.html</anchor-external> CGI/1.1 の仕様策定</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <em>CGIのメカニズム (How a CGI Runs)</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://web.archive.org/web/20020203190929/www.dais.is.tohoku.ac.jp/~kabe/WWW/cgimech/cgi-mechanism.html">http://web.archive.org/web/20020203190929/www.dais.is.tohoku.ac.jp/~kabe/WWW/cgimech/cgi-mechanism.html</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.sambar.com/syshelp/cgi.htm">http://www.sambar.com/syshelp/cgi.htm</anchor-external>: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Sambar</anchor> という HTTP サーバーの実装について。</li></ul><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> CGI: Common Gateway Interface part 11 <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://pc2.2ch.net/test/read.cgi/php/1055597189/">http://pc2.2ch.net/test/read.cgi/php/1055597189/</anchor-external> : 常に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">perl</anchor> の侵蝕を受けているものの、基本的にはちゃんと違いを分かってる人がいるスレ。ちゃんと <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> とか <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> とか <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor> のはなしをしている・・・ってそれだって CGI と違うやん(w</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal> と高評価してしまったけどそうでもないみたい。たまたままともなところを読んだだけで全体的には厨ばっか。</li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end>
<cite>Shibuya Perl Mongers : Shibuya Perl Mongersテクニカルトーク#3</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://shibuya.pm.org/blosxom/techtalks/techtalks_200306.html#techtalks_200306">http://shibuya.pm.org/blosxom/techtalks/techtalks_200306.html#techtalks_200306</anchor-external></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mod_cgi</anchor> の実装の非常に簡単な解説 (発表資料 PDF あり)。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">iPlanet</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">標準出力</anchor>だけでなく、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">標準誤り出力</anchor>まで <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>に送るそうです。。。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <cite>HTTP::Request::AsCGI - search.cpan.org</cite>
( (<time>2012-02-12 13:25:42 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://search.cpan.org/dist/HTTP-Request-AsCGI/lib/HTTP/Request/AsCGI.pm">http://search.cpan.org/dist/HTTP-Request-AsCGI/lib/HTTP/Request/AsCGI.pm</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <cite>WWW::Mechanize::CGI - search.cpan.org</cite>
( (<time>2012-02-12 13:27:05 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://search.cpan.org/dist/WWW-Mechanize-CGI/lib/WWW/Mechanize/CGI.pm">http://search.cpan.org/dist/WWW-Mechanize-CGI/lib/WWW/Mechanize/CGI.pm</anchor-external></p></section></body></html>