MENU

GETとPOSTの違いをPHPで確認する

目次

はじめに: GETとPOSTはHTTPリクエストの目的を表す

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

あわせて読みたい
HTTPリクエストとは何か はじめに: HTTPリクエストはブラウザからサーバーへのお願い Webページを開くとき、ブラウザはサーバーに対して「このページをください」と依頼しています。この依頼がH...

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=phppage=1 がサーバーへ送られる情報です。ブラウザのアドレスバーにも表示されます。

GETのよいところは、URLとして共有しやすいことです。検索結果ページや絞り込み結果ページをブックマークしたり、他の人にURLを送ったりしやすくなります。

一方で、URLに情報が表示されるため、パスワードや個人情報のような内容をGETで送るべきではありません。

GETは主にデータ取得に使い、検索条件などはURLのクエリ文字列として送られます。

PHPでGETパラメータを受け取る

PHPでは、GETで送られたクエリ文字列を $_GET から受け取れます。

たとえば、次のようなURLでアクセスしたとします。

/search.php?keyword=php

PHPでは、次のように値を取り出せます。

<?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リクエストとして読み解きやすくなります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

20代前半に、ゲームボーイアドバンス、ニンテンドーDS、Wii向けソフトの開発に携わりました。

その後、20代後半にかけては組み込み系エンジニアとして、主にサーバーソフトウェアの開発を経験。

30代からはWebエンジニアとして、さまざまなWebサービスの開発に携わってきました。

現在は40代となり、ゲーム開発、組み込み開発、Web開発で培った経験を活かしながら、技術をわかりやすく伝える活動にも取り組んでいます。

コメント

コメントする

CAPTCHA


目次