local CGI

local CGI

[18] いくつかの Webブラウザーなどは、 file: URL などでローカルファイルCGIスクリプトとして実行する機能として CGI/1.1 を実装していました。このような機能はローカルCGI (local CGI) などと呼ばれています。

[1] w3m は local file (file: URI であらわされる資源) を HTTP のように CGIスクリプトとして扱う local CGI 機能があります。少々の w3m の動作の取得・制御も可能です。

[2] 安全上の理由から、 local CGI script と認識され得るのは file:///cgi-bin/ 以下とかに限られます。 (このディレクトリは仮想で、実体は w3m の設定で指定します。)

メタ変数

[9] Apache などと同じように、メタ変数環境変数として提供されます。

CGI/1.1 で規定されているほとんどのメタ変数を用意してくれます。独自拡張の REQUEST_URI にも対応しています。 詳しくはソース (>>8) を見て下さい。

HTTP_* 変数群は、 HTTP_REFERER 以外は用意しないようです。

[10] 注意しておきたい点としては、 REMOTE_ADDRREMOTE_HOST には常に 127.0.0.1localhost が、 SERVER_NAMESERVER_PORT にも常に localhost80 が入るようになっています。 SEFVER_PROTOCOL も常に HTTP/1.0 です。 最後の2つは local でない CGI を emulate するためでしょうが、 このおかげで local でない CGI と local CGI を完全に区別する方法はありません。

[11] とはいっても、 local でない CGI と local CGI を区別するのは簡単です。 SERVER_SOFTWARE には普段の HTTP 要求で User-Agent 欄に送る値が入っていますから、これが w3m で始まれば w3m が local CGI 機能を使っていると分かります。 (w3m variant でこの文字列が w3m で始まらなかったら困るかもしれませんが。)

[14] 変数 LOCAL_COOKIE_FILE には、 local Cookie に使用できるファイルの名前が入ります。

古い版 (2003年1月くらいの版まで) では、 LOCAL_COOKIE が使われてました。 こちらの変数にはセッション識別子に使える値が入るみたいです。

[12] この他に、 W3M_* 変数群から情報を取得することもできます。

CGI 頭欄

[13] w3m 独自の w3m-control 欄が用意されています。 これを使うと任意の機能を実行できます。 README.func <http://cvs.sourceforge.net/viewcvs.py/w3m/w3m/doc-jp/README.func> に機能の一覧があります。

この欄を複数個出力すれば、その順に実行できます。 なお、 local CGI スクリプトからではない通常の HTTP 応答でこの欄は認識されません。されるとしたら危険なことに。。。

参考文献

関連

[17] ELink でも同様の機能が実装されています。

[82] Webブラウザーやその拡張機能として URL scheme cgi:cgi+: といった local CGI と類似した機能が実装されていることもあります。

歴史

[19] Web Forms 2.0 には file: URL へのフォーム提出CGI により処理することに (参考としてではありますが) 言及がありました。 (現在の HTML Standard にはありません。)