CGI を動かす

動的処理を行う場合は CGI を使用します。

Web では初期の頃(主に 1900 年代)に使用されていて、

PHP が普及する前に主にシェルや Perl を用いて処理されていました。

近いような事が Gemini プロトコルでも可能です。

CGI として動作可能であれば、プログラミング言語は問いません。

このページでは GmCapsule を用いて CGI を動作する環境を構築しています。

GmCapsule は Python で作られていて、

公式ドキュメントなども CGI サンプルが Python になっているのですが、

実際には Python 以外でも動作が可能です。

このページでは多くの環境で動作する sh にしています。

関連資料として、次をリンクします。

Twins | MakerSpace (https:)

gemini cgi guide | tilde.team wiki (https:)

- - - 🎈 - - -

GmCapsule の初期設定

ここではローカルで環境を整える前提で記載をしています。

Python が入っている前提で pip でインストールを行います。

入った事を確認します。

設定ファイルは .ini で制作します。

ここでは localhost.ini とします。

各場所は相対的にもできます。上記の場合、次の記載となります。

記載の中で host = localhost はネット上に公開する場合

host = example.com sub.example.com という感じに複数のホスト名を記載できます。

この場合各場所にある `localhost` が各ホスト名で参照される事になります。

GmCapsule では証明書が必要ですので、作成します。.pem 形式である必要があります。

Agate だと .der 形式が使われているので .pem 形式への変換が必要です。

.pem 形式はテキストエディタで開くと

-----BEGIN CERTIFICATE----- や -----BEGIN PRIVATE KEY----- ではじまる

テキストファイルになっています。

.der はバイナリーファイルなので文字化けした内容になっています。

それでは、cgi-bin/localhost/hello のテキストファイルを作成します。

GmCapsule で bin_root を用いている場合、

cgi-bin 下を動的ファイルの対象とするため、

拡張子を .cgi にする必要はありません。

ステータスコード 2 桁の後に出力する MIME type を指定します。

正常な場合は 20 です。(http・https でいう 200 に同等)

Gemtext ならば text/gemini です。

この hello ファイルには実行権限をつけておいて下さい。

それではサーバーを起動してみます。

エラーが出ている場合は場所やファイルを確認してみて下さい。

正常に起動しているなら Lagrange などの Gemini クライアントを起動し、

gemini://localhost/ で localhost/index.gmi の静的ファイル、

gemini://localhost/hello で cgi-bin/localhost/hello で作成した

CGI が動作している事を確認します。(cgi-bin は不要です)

入力フォームを表示する CGI はこんな感じです。

URL の ? 以降が QUERY_STRING に入るのは、Web と同じ動きです。

- - - 🎈 - - -

ステータスコード

HTTP・HTTPS では 3 桁のコードを返しますが、Gemini は 2 桁になっています。

1● 入力を促す関連

入力を促すフォームの表示はステータスコードで行います。

2● 正常

HTTP は通常 200 なのでわかりやすいです。

3● 転送

HTTP は 30● なので、これもわかりやすいですが、並びに注意して下さい。

4● 一時的なエラー

http・https で 50● を返すエラーは Gemini では 4● で返す事が多そうです。

5● エラー

http・https だと Not Found は 404 ですが、Gemini は 51 になっています。

同様に Gone も http・https は 410 ですが、Gemini は 52 です。

6● 証明書関連のエラー

ステータスコードで定義されていますが、通常はクライアントが返すでしょう。

- - - 🎈 - - -

🎈 fusen.srht.site

◯ Powered by sourcehut pages