はじめに: GETとPOSTはHTTPリクエストの目的を表す
前の記事では、HTTPリクエストはブラウザからサーバーへの依頼だと説明しました。その依頼には「何をしたいのか」を表すメソッドがあります。

Web開発で特によく出てくるHTTPメソッドが、GETとPOSTです。
GETは、主にサーバーからデータを取得するときに使います。POSTは、主にサーバーへデータを送信するときに使います。
この説明だけだと、少し抽象的に感じるかもしれません。そこでこの記事では、PHPの短いコードを使って、GETとPOSTで送られた値がどのように受け取れるのかを確認します。
基本情報技術者試験では、GETとPOSTはHTTPメソッドの代表例として出てきます。実務でも、検索フォーム、ログインフォーム、お問い合わせフォーム、API通信などで日常的に使います。
GETとPOSTは、HTTPリクエストで何をしたいのかを表す代表的なメソッドです。
GETは主にデータを取得するときに使う
GETは、主にサーバーからデータを取得するときに使います。たとえば、Webページを開く、検索結果を表示する、記事一覧を取得する、といった場面です。
GETで条件を渡す場合、URLの末尾にクエリ文字列を付けることがあります。
/search.php?keyword=php&page=1この例では、keyword=php と page=1 がサーバーへ送られる情報です。ブラウザのアドレスバーにも表示されます。
GETのよいところは、URLとして共有しやすいことです。検索結果ページや絞り込み結果ページをブックマークしたり、他の人にURLを送ったりしやすくなります。
一方で、URLに情報が表示されるため、パスワードや個人情報のような内容をGETで送るべきではありません。
GETは主にデータ取得に使い、検索条件などはURLのクエリ文字列として送られます。
PHPでGETパラメータを受け取る
PHPでは、GETで送られたクエリ文字列を $_GET から受け取れます。
たとえば、次のようなURLでアクセスしたとします。
/search.php?keyword=phpPHPでは、次のように値を取り出せます。
<?php
$keyword = $_GET['keyword'] ?? '';
?>
<!doctype html>
<html lang="ja">
<body>
<p>検索キーワード:
<?= htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8') ?>
</p>
</body>
</html>$_GET['keyword'] には、URLの keyword=php の値が入ります。?? '' は、値がない場合に空文字を使うための書き方です。
画面に出力するときは、htmlspecialchars() を使っています。ユーザーが入力した値をそのままHTMLに出すと、意図しないHTMLやJavaScriptとして解釈される危険があります。
GETはURLに条件が残るため、検索や一覧の絞り込みと相性がよいです。
PHPでは、GETで送られた値を $_GET から受け取れます。
POSTは主にデータを送信するときに使う
POSTは、主にサーバーへデータを送信するときに使います。たとえば、ログイン、ユーザー登録、お問い合わせフォーム、記事の投稿などです。
POSTでは、送信データは主にリクエストボディに入ります。GETのように、入力内容がURLのクエリ文字列として見える形にはなりません。
ただし、ここで誤解しやすい点があります。POSTにすれば、それだけで安全になるわけではありません。
POSTでも、通信が暗号化されていなければ、途中で通信内容を見られる可能性があります。ログインや個人情報を扱うフォームでは、HTTPSを使うことが重要です。
また、POSTで送った内容も、ブラウザの開発者ツールやサーバーログなどで確認できる場合があります。POSTは「URLに出にくい」だけで、「秘密にできる」という意味ではありません。
POSTは主にデータ送信に使いますが、POSTだけで通信内容が安全になるわけではありません。
PHPでPOSTされたフォームを受け取る
HTMLフォームでPOSTを使うには、method="post" を指定します。
<!doctype html>
<html lang="ja">
<body>
<form action="contact.php" method="post">
<label>
名前:
<input type="text" name="name">
</label>
<button type="submit">送信</button>
</form>
</body>
</html>このフォームを送信すると、name に入力された値がPOSTリクエストとして contact.php に送られます。
PHP側では、$_POST から値を受け取れます。
<?php
$name = $_POST['name'] ?? '';
?>
<!doctype html>
<html lang="ja">
<body>
<p>送信された名前:
<?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>
</p>
</body>
</html>$_POST['name'] には、フォームの name="name" に対応する値が入ります。
GETの例と同じように、出力時には htmlspecialchars() を使っています。フォーム入力はユーザーが自由に変更できるため、画面に出すときは必ず安全に扱う意識が必要です。
PHPでは、POSTで送られたフォームの値を $_POST から受け取れます。
GETとPOSTの違いを整理する
GETとPOSTの違いを、いくつかの観点で整理してみます。
GET
- 主にデータを取得するときに使う
- 条件はURLのクエリ文字列に出ることが多い
- ブックマークや共有に向いている
- 検索、絞り込み、ページ番号などと相性がよい
POST
- 主にデータを送信するときに使う
- データは主にリクエストボディに入る
- URLに入力内容が出にくい
- 登録、更新、ログイン、お問い合わせなどと相性がよい基本は、取得ならGET、送信や変更ならPOSTと考えると分かりやすいです。
ただし、実務ではさらに細かいHTTPメソッドも使われます。たとえば、APIでは更新にPUTやPATCH、削除にDELETEを使う設計もあります。
また、GETとPOSTの違いはセキュリティの強さだけで決まるものではありません。パスワードをPOSTで送っても、HTTPSでなければ安全とはいえません。逆に、検索条件のようにURLに残ってよい情報はGETが向いています。
GETは取得、POSTは送信や変更に使うのが基本ですが、安全性はHTTPSや入力処理も含めて考える必要があります。
試験ではどう問われるか
基本情報技術者試験では、GETとPOSTはHTTPメソッドの代表例として問われることがあります。
GETは、サーバーから情報を取得するために使われることが多いメソッドです。URLにクエリ文字列を付けて条件を渡す場面もあります。
POSTは、サーバーへデータを送信するために使われることが多いメソッドです。フォーム送信や登録処理の例と結びつけると覚えやすくなります。
また、HTTPリクエストにはメソッド、URL、ヘッダー、ボディが含まれるという理解も大切です。GETとPOSTは、そのうちメソッドにあたる部分です。
試験では、GETは取得、POSTは送信という代表的な役割を押さえることが大切です。
実務ではどう使われるか
実務では、GETとPOSTの使い分けを間違えると、使いにくい画面や危険な設計につながることがあります。
たとえば、検索フォームや一覧の絞り込みはGETが向いています。URLに条件が残るため、検索結果を共有したり、ブラウザの戻るボタンで状態を保ったりしやすくなります。
一方、お問い合わせフォーム、ログイン、会員登録、記事投稿のように、サーバー側の状態を変える処理はPOSTが向いています。再読み込み時に「フォームを再送信しますか」と表示されることがあるのも、POSTがデータ送信の処理として扱われるためです。
Chrome開発者ツールのNetworkタブを使うと、実際のリクエストがGETなのかPOSTなのか、どのURLに送られているのか、Payloadに何が入っているのかを確認できます。
実務では、検索や絞り込みはGET、登録や送信はPOSTという使い分けを意識すると設計しやすくなります。
まとめ: 目的に合わせてGETとPOSTを使い分ける
GETとPOSTは、HTTPリクエストでよく使われる代表的なメソッドです。
GETは主にデータを取得するときに使い、検索条件などをURLのクエリ文字列として渡すことがあります。PHPでは $_GET から値を受け取れます。
POSTは主にデータを送信するときに使い、フォームの入力内容などをリクエストボディとして送ります。PHPでは $_POST から値を受け取れます。
どちらを使うかは、「そのリクエストで何をしたいのか」によって決めます。取得したいのか、送信してサーバー側の状態を変えたいのかを考えると、使い分けが見えやすくなります。
GETとPOSTを理解すると、フォーム送信やAPI通信をHTTPリクエストとして読み解きやすくなります。

コメント