情報処理安全確保支援士 2025年 秋期 午前2 問18
問題文
JavaScriptなどのスクリプト言語を使って、Webブラウザに組み込まれているサーバとの非同期通信機能を利用する技術であり、地図の高速なスクロールや、キーボード入力に合わせた検索候補の逐次表示を実現するものはどれか。
選択肢
ア:Ajax(正解)
イ:CSS
ウ:DOM
エ:SAX
🔒 解説は解答すると表示されます
Ajax(非同期通信)【午前2解説】
正解の理由
地図の高速なスクロールや、キーボード入力に合わせた検索候補の逐次表示は、ページ全体を再読み込みせずにブラウザとサーバ間で非同期にデータをやり取りして表示を部分更新する仕組みが必要です。その仕組みを指す用語が ア の Ajax(Asynchronous JavaScript and XML)です。Ajax はブラウザ内の API(従来は XMLHttpRequest、現在は Fetch API など)を利用して非同期 HTTP 通信を行い、取得したデータを DOM 操作で画面に反映します。したがって、動的な部分更新を実現する技術として ア が適切です。
解法ステップ
- 設問で示された動作(「地図の高速なスクロール」「入力に応じた逐次表示」)が「ページ全体の再読み込みなしに部分更新される」ことを確認する。
- 「部分更新・非同期通信」を実現する技術を連想する(Ajax、Fetch、XHR)。
- 選択肢を照らし合わせる:CSS は見た目、DOM は文書モデル、SAX は XML の逐次パーサであり、非同期通信そのものを指すのは Ajax であると判断する。
選択肢別の誤答解説
- ア: Ajax
- 画面の一部だけをサーバからの応答で更新する「非同期通信を用いた動的更新」を表す用語であり、本問の事例に該当する。
- イ: CSS
- Cascading Style Sheets。レイアウトやスタイル指定を行う技術で、通信機能やサーバとのデータやり取りは含まれないため不適切。
- ウ: DOM
- Document Object Model。HTML/XML 文書をプログラムから操作するためのオブジェクト表現であり、表示や要素操作に関係するが「通信機能」を示す用語ではない。Ajax と組み合わせて使われることは多いが単体では不正解。
- エ: SAX
- Simple API for XML。ストリーム形式で XML を逐次パースするための API/方式であり、クライアントとサーバの非同期通信技術を指すものではない。
よくある誤解
- 「Ajax = XMLHttpRequest のみ」
- 従来は XMLHttpRequest が代表的でしたが、現在は Fetch API や WebSocket、またはライブラリ(axios 等)を使うことが一般的です。Ajax は概念(非同期でのデータ取得と部分更新)を指します。
- 「DOM 操作自体が通信機能」
- DOM は表示や要素操作のための仕組みで、通信は別の API(XHR/Fetch)が担います。両者は組み合わせて使われますが役割は異なります。
- 「Ajax は常に XML を使う」
- 名前に XML が含まれる歴史的経緯はありますが、現代では JSON が主流です。
補足コラム
Ajax を使う際に押さえておきたいポイント
- データ形式:JSON が主流。受け取った JSON をパースして DOM に反映する流れが典型。
- 非同期処理の管理:コールバック地獄を避けるため、Promise や async/await を使う。
- パフォーマンス:頻繁に送信する入力イベントなどはデバウンス(debounce)やスロットリング(throttle)で抑制する。
- セキュリティ:同一生成元ポリシーと CORS 設定に注意する。
実際の簡単な検索候補表示の例(デバウンス付き、Fetch 使用):
const input = document.getElementById('query');
let timerId = null;
input.addEventListener('input', (e) => {
const q = e.target.value.trim();
clearTimeout(timerId);
if (q === '') {
showSuggestions([]);
return;
}
// 300ms のデバウンス
timerId = setTimeout(async () => {
try {
const res = await fetch('/suggest?q=' + encodeURIComponent(q));
if (!res.ok) throw new Error('Network response was not ok');
const data = await res.json(); // サーバは JSON を返す想定
showSuggestions(data);
} catch (err) {
console.error(err);
showSuggestions([]);
}
}, 300);
});
function showSuggestions(list) {
const box = document.getElementById('suggestions');
box.innerHTML = '';
list.forEach(item => {
const li = document.createElement('div');
li.textContent = item;
box.appendChild(li);
});
}
上記はブラウザ内で非同期にサーバへ問い合わせ、結果を部分的に描画する典型的な Ajax 的実装です。
FAQ
Q1: Ajax と Fetch の違いは何ですか?
A1: Ajax は「非同期でサーバと通信して部分更新する概念」を指す用語全体で、Fetch はその実装に使われるモダンなブラウザ API の一つです。従来の XMLHttpRequest(XHR)より Promise ベースで扱いやすい点が特徴です。
A1: Ajax は「非同期でサーバと通信して部分更新する概念」を指す用語全体で、Fetch はその実装に使われるモダンなブラウザ API の一つです。従来の XMLHttpRequest(XHR)より Promise ベースで扱いやすい点が特徴です。
Q2: Ajax を使うときのセキュリティで気をつけることは?
A2: 同一生成元ポリシー(Same-Origin Policy)と CORS の設定に注意し、不正なドメインからのリソース読み込みを防ぐこと、サーバ側で適切な認可・検証を行うことが重要です。
A2: 同一生成元ポリシー(Same-Origin Policy)と CORS の設定に注意し、不正なドメインからのリソース読み込みを防ぐこと、サーバ側で適切な認可・検証を行うことが重要です。
Q3: リアルタイム更新と Ajax の違いは?
A3: Ajax はクライアントからのリクエストに応じてデータを取得する方式(ポーリングやユーザ操作に応じた更新)です。WebSocket 等はサーバからクライアントへリアルタイムにプッシュするための別方式です。
A3: Ajax はクライアントからのリクエストに応じてデータを取得する方式(ポーリングやユーザ操作に応じた更新)です。WebSocket 等はサーバからクライアントへリアルタイムにプッシュするための別方式です。
関連キーワード: Ajax, XMLHttpRequest, Fetch API, 非同期通信, デバウンス, JSON, CORS, DOM

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

