CGI を動かす
動的処理を行う場合は CGI を使用します。
Web では初期の頃(主に 1900 年代)に使用されていて、
PHP が普及する前に主にシェルや Perl を用いて処理されていました。
近いような事が Gemini プロトコルでも可能です。
CGI として動作可能であれば、プログラミング言語は問いません。
このページでは GmCapsule を用いて CGI を動作する環境を構築しています。
GmCapsule は Python で作られていて、
公式ドキュメントなども CGI サンプルが Python になっているのですが、
実際には Python 以外でも動作が可能です。
このページでは多くの環境で動作する sh にしています。
関連資料として、次をリンクします。
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● 入力を促す関連
入力を促すフォームの表示はステータスコードで行います。
- 10 INPUT - 入力フォームを表示
- 11 SENSITIVE INPUT - パスワードなどの入力。クライアントは入力文字を隠すでしょう
2● 正常
HTTP は通常 200 なのでわかりやすいです。
- 20 SUCCESS - Gemtext などを返す
3● 転送
HTTP は 30● なので、これもわかりやすいですが、並びに注意して下さい。
- 30 REDIRECT - TEMPORARY - 一時的な転送。メンテ中など
- 31 REDIRECT - PERMANENT - 恒久な転送。新たな URL に返送した場合など
4● 一時的なエラー
http・https で 50● を返すエラーは Gemini では 4● で返す事が多そうです。
- 40 TEMPORARY FAILURE - 一時的に問題が発生している場合
- 41 SERVER UNAVAILABLE - 一時的なサーバーエラーなど
- 42 CGI ERROR - CGI を処理してのエラー
- 43 PROXY ERROR - プロキシ関連のエラー
- 44 SLOW DOWN - サーバーからレスポンスが得られないなど
5● エラー
http・https だと Not Found は 404 ですが、Gemini は 51 になっています。
同様に Gone も http・https は 410 ですが、Gemini は 52 です。
- 50 PERMANENT FAILURE - サーバーのハード故障など、41 より重い状況
- 51 NOT FOUND - ファイルが存在しない場合
- 52 GONE - このサーバー・ドメインで提供を終了している
- 53 PROXY REQUEST REFUSED - プロキシが Gemini プロトコルを提供していない場合など
- 59 BAD REQUEST - リクエストされた形式が不定など
6● 証明書関連のエラー
ステータスコードで定義されていますが、通常はクライアントが返すでしょう。
- 60 CLIENT CERTIFICATE REQUIRED - クライアント証明書の要求を行う場合
- 61 CERTIFICATE NOT AUTHORISED - 証明書未承認。他用途の証明書を使用した場合
- 62 CERTIFICATE NOT VALID - 証明書は無効。証明書の期限切れなど
- - - 🎈 - - -