こんにちは、42Tokyo所属のkharuyaです🙇
以前の記事でRFCの概要をまとめた記事を投稿しましたが、今回の記事では内容を RFC 3875 に絞ってまとめました。
最後まで読んでいただけると嬉しいです。
目次
- 📝 そもそもRFC (Request for Comments) ってなに?
- 🌐 RFC 3875 (CGI v1.1) の概要
- 📋 RFC 3875 の主要な構成一覧
- 📋 RFC 3875 定義:全メタ変数(環境変数)一覧
- ✍️ おわりに
- 📚 参考文献・関連リンク
📝 そもそもRFC (Request for Comments) ってなに?
RFC は、一言でいうと 「インターネットの世界における共通のルールブック」 です。
私たちがブラウザでウェブサイトを見たり、メールを送ったりできるのは、世界中のコンピュータがこの「RFC」という同じルールに従って動いているからです。
RFCがそもそもわからないという方は以前投稿した下記の記事を読んだ後で本投稿を読んでいただければ理解が深まるかと思います。
🌐 RFC 3875 (CGI v1.1) の概要
RFC 3875 は、CGI (Common Gateway Interface) バージョン 1.1 について定義した文書です。
Webサーバーが外部プログラム(スクリプト)を実行し、その結果をクライアントに返すための「橋渡し」のルールが書かれています。
RFC 3875ドキュメント
1. このドキュメントの役割
Webサーバー自体には「HTMLを返す」機能しかありませんが、CGIを使うことで、サーバーの外にあるプログラムを呼び出せるようになります。RFC 3875は、サーバーがプログラムを呼び出す際に「どんな情報を」「どうやって」渡すべきかという共通規格を定めています。
2. 定義されている主な内容
-
メタ変数 (Meta-Variables): サーバーからプログラムへ渡す情報の形式(環境変数として渡されます)。全変数一覧はドキュメントの Section 4.1 を参照ください。
-
リクエストの処理:
GETやPOSTのデータをプログラムがどう受け取るか。詳細はドキュメントの Section 4.2 を参照ください。 -
レスポンスの形式: プログラムが出力した結果(ヘッダーとボディ)をサーバーがどう解釈するか。詳細はドキュメントの Section 6 を参照ください。
3. 初学者が注目すべきポイント
| 項目 | 内容 |
|---|---|
| 環境変数 |
QUERY_STRING や REQUEST_METHOD など。サーバーが設定すべき変数のリストです。 |
| 標準入力/標準出力 | サーバーはリクエストボディをプログラムの「標準入力」に流し込み、プログラムの「標準出力」から結果を受け取ります。 |
| スクリプト・ヘッダー | プログラムが最初に出力すべき情報(例:Content-Type: text/html)のルールです。 |
📋 RFC 3875 の主要な構成一覧
「どこを読めばいいのか」を迷わないよう、全 11 セクションある構成の中から、特に重要な部分をピックアップして表にまとめました。
| セクション | 項目名 | 初学者が注目すべき内容 |
|---|---|---|
| Section 4 | The CGI Request | 最重要。 サーバーがプログラムに渡すべき「メタ変数(環境変数)」の全リストと定義。 |
| Section 6 | The CGI Response | プログラムから返ってくるデータの形式(ヘッダーとボディの区切りなど)。 |
| Section 7 | System-Specifics | 環境変数の設定方法など、システム側の実装に関する注意。 |
📋 RFC 3875 定義:全メタ変数(環境変数)一覧
CGIスクリプトを実行する際、Webサーバーがセットすべき変数の一覧( 全7種類 )です。
| 変数名 | 内容 (概要) | 補足・初学者が注目すべき点 |
|---|---|---|
| AUTH_TYPE | 認証の種類 | クライアント認証がある場合(Basicなど)。なければ空。 |
| CONTENT_LENGTH | リクエストボディの長さ | POST等でボディがある場合、そのバイト数を指定。 |
| CONTENT_TYPE | ボディのメディアタイプ |
application/x-www-form-urlencoded など。 |
| GATEWAY_INTERFACE | CGIのバージョン | RFC 3875準拠なら CGI/1.1 固定。 |
| PATH_INFO | 追加のパス情報 | 実行スクリプト名の後のパス。例: /cgi-bin/test.py/extra/path の /extra/path 部分。 |
| PATH_TRANSLATED | 物理パス |
PATH_INFO をサーバー内の物理的なファイルパスに変換したもの。 |
| QUERY_STRING | クエリパラメータ | URLの ? 以降の文字列。URLエンコードされたまま渡す。 |
| REMOTE_ADDR | クライアントのIPアドレス | リクエストを送ってきた端末のIP。 |
| REMOTE_HOST | クライアントのホスト名 | 取得できない場合は REMOTE_ADDR と同じか、空でも可。 |
| REMOTE_IDENT | ユーザー識別情報 |
Ident プロトコルによる情報。現代ではほぼ空(未実装)でOK。 |
| REMOTE_USER | 認証ユーザー名 | 認証が成功している場合のユーザー名。 |
| REQUEST_METHOD | メソッド名 |
GET, POST など。大文字で指定。 |
| SCRIPT_NAME | スクリプトのパス | 実行されるスクリプトを指すURIのパス。 |
| SERVER_NAME | サーバーのホスト名 |
Host ヘッダーやサーバー設定から取得。 |
| SERVER_PORT | サーバーのポート番号 | リクエストを受け取ったポート(80や8080など)。 |
| SERVER_PROTOCOL | プロトコル名とVer |
HTTP/1.1 など。 |
| SERVER_SOFTWARE | サーバーの名称 |
Webserv/1.0 など、自作サーバーの名前。 |
💡 その他の変数 (Protocol-Specific Variables)
上記以外に、クライアントから送られてきた全てのHTTPヘッダーは、以下の形式で環境変数として渡す必要があります。
-
形式:
HTTP_+ ヘッダー名を大文字化 + ハイフンをアンダースコアに置換 -
例:
User-Agent→HTTP_USER_AGENT -
例:
Accept-Language→HTTP_ACCEPT_LANGUAGE
✍️ おわりに
ここまで読んでいただきありがとうございます🙇
今回はRFC 3875について簡単にまとめてみましたが、以前投稿したRFCとはなんぞやと一緒に読んでいただければ、さらにRFCについての理解が深まるかと思います。
📚 参考文献・関連リンク
👤 著者について
- X: @h_kawasaki_
- GitHub: 42kharuya
いいねやフォローをいただけると執筆の励みになります!🚀