1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RFC 3875の概要についてまとめてみた

1
Posted at

こんにちは、42Tokyo所属のkharuyaです🙇
以前の記事でRFCの概要をまとめた記事を投稿しましたが、今回の記事では内容を 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 を参照ください。

  • リクエストの処理: GETPOST のデータをプログラムがどう受け取るか。詳細はドキュメントの Section 4.2 を参照ください。

  • レスポンスの形式: プログラムが出力した結果(ヘッダーとボディ)をサーバーがどう解釈するか。詳細はドキュメントの Section 6 を参照ください。

3. 初学者が注目すべきポイント

項目 内容
環境変数 QUERY_STRINGREQUEST_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-AgentHTTP_USER_AGENT
  • 例: Accept-LanguageHTTP_ACCEPT_LANGUAGE

✍️ おわりに

ここまで読んでいただきありがとうございます🙇
今回はRFC 3875について簡単にまとめてみましたが、以前投稿したRFCとはなんぞやと一緒に読んでいただければ、さらにRFCについての理解が深まるかと思います。

📚 参考文献・関連リンク

👤 著者について

いいねやフォローをいただけると執筆の励みになります!🚀

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?