基本情報技術者 2010年 春期 午前(科目A) 問39
問題文
Web サーバにおいて、クライアントからの要求に応じてアプリケーションプログラムを実行して、その結果をブラウザに返すなどのインタラクティブなページを実現するために,Web サーバと外部プログラムを連携させる仕組みはどれか。
選択肢
ア:CGI(正解)
イ:HTML
ウ:MIME
エ:URL
🔒 解説は解答すると表示されます
CGIによる外部プログラム連携【午前解説】
正解の理由
正解は ア(CGI)です。
CGI(Common Gateway Interface)はWebサーバがクライアントの要求に応じて外部プログラム(スクリプトや実行ファイル)を起動し、標準入力や環境変数でリクエスト情報を渡し、標準出力で生成したHTTPヘッダ+コンテンツを返す仕組みです。この動作によりフォーム入力に応じた処理やデータベース問い合わせの結果を動的なページとして返せるため、問題文の「インタラクティブなページを実現する」条件に合致します。
CGI(Common Gateway Interface)はWebサーバがクライアントの要求に応じて外部プログラム(スクリプトや実行ファイル)を起動し、標準入力や環境変数でリクエスト情報を渡し、標準出力で生成したHTTPヘッダ+コンテンツを返す仕組みです。この動作によりフォーム入力に応じた処理やデータベース問い合わせの結果を動的なページとして返せるため、問題文の「インタラクティブなページを実現する」条件に合致します。
解法ステップ
- 問題文中のキーワード「外部プログラムを実行」「実行結果をブラウザに返す」「インタラクティブなページ」を抽出する。
- 選択肢それぞれの機能を頭の中で短く整理する(CGI:連携実行/HTML:文書構造/MIME:媒体型/URL:識別子)。
- 動的処理や外部実行を直接扱うものはCGIのみであると判断する。
- よって正解はア(CGI)。
選択肢別の誤答解説
- ア:CGI(正解)
- Webサーバが外部プログラムを起動し、環境変数や標準入出力でデータをやり取りして動的コンテンツを生成する仕組み。HTTPヘッダ(例:Content-Type)を先頭に出力する必要があります。
- イ:HTML(誤り)
- ハイパーテキストを記述するマークアップ言語で、ブラウザに表示するための構造や見た目を定義する。サーバ側でプログラムを起動する機能は持たない。
- ウ:MIME(誤り)
- Multipurpose Internet Mail Extensionsに由来する「媒体(コンテンツ)タイプ」を示す仕組み。ファイルやレスポンスの種類を示すだけで、プログラム実行の連携ではない。
- エ:URL(誤り)
- Uniform Resource Locatorは資源の位置や取得方法を示す識別子。どのように動的コンテンツを生成するかは示さない。
よくある誤解
- HTMLとCGIを混同する:HTMLは静的な文書の構造と表示を定義する言語であり、サーバ側で外部プログラムを起動する仕組みではありません。
- MIMEやURLが動的処理を担うと誤解する:MIMEはデータの媒体型を示す情報、URLは資源の位置を示す識別子で、いずれも実行連携の仕組みではありません。
- CGI=古い=使われないと考える:確かに性能面で課題はあるが、概念としては今も基本であり、FastCGIやアプリケーションサーバなどの基礎になっています。
補足コラム
CGIは分かりやすく導入しやすい反面、リクエストごとにプロセスを生成するため高負荷時に性能問題が出ます。このためFastCGIやmod_perl、PHP-FPM、アプリケーションサーバ(例:Tomcat、Unicorn)など、プロセス/スレッドの再利用や常駐方式で性能改善した技術が普及しました。しかし「外部プログラムを呼んで結果を返す」という基本的な考え方はCGIが起点です。
簡単なPythonによるCGIスクリプト例(実行環境にCGI対応設定が必要です):
#!/usr/bin/env python3
print("Content-Type: text/html")
print()
print("<html><body><h1>Hello CGI</h1></body></html>")
実運用では環境変数(QUERY_STRING、REQUEST_METHOD 等)やフォーム入力(標準入力)を扱い、入力検証やエラーハンドリング、セキュリティ対策(入力エスケープ、権限設定等)を必ず行ってください。
FAQ
Q1: PHPやPerlのスクリプトはCGIですか?
A1: PHPやPerlはCGIとして動作することもあります。Webサーバのモジュールとして組み込む(mod_php等)か、FastCGI/PHP-FPMのような常駐プロセス方式で動作させることが多いです。動作方式により性能や設定が異なります。
A1: PHPやPerlはCGIとして動作することもあります。Webサーバのモジュールとして組み込む(mod_php等)か、FastCGI/PHP-FPMのような常駐プロセス方式で動作させることが多いです。動作方式により性能や設定が異なります。
Q2: CGIはもう使われていませんか?
A2: 完全に使われなくなったわけではありません。小規模や教育用では今も利用されますが、本番での高負荷対応にはFastCGIやアプリケーションサーバ方式が一般的です。概念としての理解は必須です。
A2: 完全に使われなくなったわけではありません。小規模や教育用では今も利用されますが、本番での高負荷対応にはFastCGIやアプリケーションサーバ方式が一般的です。概念としての理解は必須です。
Q3: 問題を見極めるコツは?
A3: 「外部プログラムの起動」「実行結果を返す」「動的なページ」といった語句を見つけたらCGIを連想してください。HTML/MIME/URLはそれぞれ別の役割を持ちます。
A3: 「外部プログラムの起動」「実行結果を返す」「動的なページ」といった語句を見つけたらCGIを連想してください。HTML/MIME/URLはそれぞれ別の役割を持ちます。
関連キーワード: CGI、FastCGI、Webサーバ、動的コンテンツ、HTTPヘッダ、標準入出力、スクリプト、パフォーマンス、セキュリティ

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

