基本情報技術者 2018年 春期 午前(科目A) 問35
問題文
Webサーバにおいて、クライアントからの要求に応じてアプリケーションプログラムを実行して、その結果をWebブラウザに返すなどのインタラクティブなページを実現するために、Webサーバと外部プログラムを連携させる仕組みはどれか。
選択肢
ア:CGI(正解)
イ:HTML
ウ:MIME
エ:URL
🔒 解説は解答すると表示されます
CGIによるWeb連携【午前解説】
正解の理由
正解: ア CGI
CGIは「Common Gateway Interface」の略で、Webサーバが外部プログラム(スクリプトやバイナリ)を呼び出して標準出力に書き出された内容をHTTPレスポンスとしてクライアントに返すための取り決めです。要求情報は環境変数(例:REQUEST_METHOD, QUERY_STRING, CONTENT_LENGTH など)や標準入力で渡され、プログラムはHTTPヘッダを含む出力を返します。問題文の「クライアントからの要求に応じてアプリケーションプログラムを実行して、その結果をWebブラウザに返す」という説明に完全に一致します。
CGIは「Common Gateway Interface」の略で、Webサーバが外部プログラム(スクリプトやバイナリ)を呼び出して標準出力に書き出された内容をHTTPレスポンスとしてクライアントに返すための取り決めです。要求情報は環境変数(例:REQUEST_METHOD, QUERY_STRING, CONTENT_LENGTH など)や標準入力で渡され、プログラムはHTTPヘッダを含む出力を返します。問題文の「クライアントからの要求に応じてアプリケーションプログラムを実行して、その結果をWebブラウザに返す」という説明に完全に一致します。
解法ステップ
- 問題文のキーワードを見つける:「外部プログラム」「実行」「結果をWebブラウザに返す」「Webサーバと連携」。
- 選択肢を照らし合わせる:CGIは「Webサーバが外部プログラムを実行して結果を返す」仕組みであるとすぐに一致します。
- 他の選択肢の役割を確認する:HTMLはマークアップ、MIMEはデータ種別、URLは識別子であり問題文の条件に合致しないと判断します。
- 正答を選ぶ:CGI(ア)。
選択肢別の誤答解説
- ア: CGI — 正解。Webサーバが外部プログラムを呼び出して標準出力で結果を返す仕様で、問題文に該当します。
- イ: HTML — 誤り。HTMLはハイパーテキスト文書の記述言語であり、サーバと外部プログラムの連携を定める仕組みではありません。
- ウ: MIME — 誤り。MIMEはメールやHTTPで使うデータの種類(Content-Type)を示す規格で、プログラムの実行や連携機構ではありません。
- エ: URL — 誤り。URLはリソースの場所や識別を示す文字列であり、外部プログラムを実行するための仕組みではありません。
よくある誤解
- HTMLを選んでしまう: HTMLはクライアント側の文書マークアップ言語であり、サーバ側で外部プログラムを実行する仕組みではありません。
- MIMEと混同する: MIMEはコンテンツの種類(Content-Type)を示すための規格で、実行・連携の仕組みではない点を誤認しやすいです。
- URLは実行命令と考える誤り: URLはリソースの識別子であって、サーバでプログラムを起動する機構そのものではありません。
補足コラム
- CGIの動作イメージ: Webサーバはリクエストを受け取ると対象ファイルがCGIスクリプトならそのプログラムを起動し、環境変数や標準入力でデータを渡して標準出力をHTTPレスポンスとして返します。
- パフォーマンス留意点: 伝統的なCGIはリクエストごとにプロセスを生成するためオーバーヘッドが大きいです。これを改善するためにFastCGIやアプリケーションサーバ(例: uWSGI、PHP-FPM)やWebサーバモジュール(mod_phpなど)が利用されます。
- セキュリティと配置: CGIスクリプトは実行権限と適切な配置(例: cgi-bin)設定、入力検証を行わないとリスクが高くなります。
- 簡単なPythonのCGI例:
#!/usr/bin/env python3
import os
import sys
# 標準出力にHTTPヘッダと本文を出力
print("Content-Type: text/html; charset=utf-8")
print()
print("<html><body><h1>CGI動作確認</h1>")
print("<p>REQUEST_METHOD = {}</p>".format(os.environ.get("REQUEST_METHOD")))
print("</body></html>")
FAQ
Q: CGIとFastCGIの違いは何ですか?
A: CGIはリクエストごとにプロセスを生成しますが、FastCGIはプロセスを常駐させて複数リクエストを処理するためオーバーヘッドが小さいです。
A: CGIはリクエストごとにプロセスを生成しますが、FastCGIはプロセスを常駐させて複数リクエストを処理するためオーバーヘッドが小さいです。
Q: HTMLはサーバ側で実行されますか?
A: いいえ。HTMLはブラウザで解釈されるマークアップ言語で、単独ではサーバ側でプログラムを実行する機能はありません。
A: いいえ。HTMLはブラウザで解釈されるマークアップ言語で、単独ではサーバ側でプログラムを実行する機能はありません。
Q: MIMEはどのように使われますか?
A: MIME(Content-Type)はサーバがレスポンスのデータ種別(text/html, image/pngなど)を示すために使用します。実行機能はありません。
A: MIME(Content-Type)はサーバがレスポンスのデータ種別(text/html, image/pngなど)を示すために使用します。実行機能はありません。
Q: CGIスクリプトはどこに置けばよいですか?
A: 多くの設定では「cgi-bin」など実行用ディレクトリに配置し、実行権限(chmod +x)を設定する必要があります。
A: 多くの設定では「cgi-bin」など実行用ディレクトリに配置し、実行権限(chmod +x)を設定する必要があります。
Q: 現代的なWebアプリはCGIだけで構築しますか?
A: 性能や管理面から、現代ではFastCGI、アプリケーションサーバ、Webフレームワークなどを組み合わせることが一般的です。ただしCGIの仕組みの理解は基礎として重要です。
A: 性能や管理面から、現代ではFastCGI、アプリケーションサーバ、Webフレームワークなどを組み合わせることが一般的です。ただしCGIの仕組みの理解は基礎として重要です。
関連キーワード: CGI, FastCGI, cgi-bin, HTTPヘッダ, 環境変数, 標準出力, Webサーバ, Apache, Nginx, mod_php, PHP-FPM, スクリプト実行, MIME, URL, HTML

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

