検索

キーワード


【Webアプリケーション】GETとPOSTの使い分け

  • 公開日:2020-10-29 17:57:57
  • 最終更新日:2020-11-13 21:37:44
【Webアプリケーション】GETとPOSTの使い分け

こんにちは。エンジニアの新田です!
ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。
今回は、Webアプリケーションの勉強をしていると出てくるGETとPOSTの使い分けについて説明します。
Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!

関連記事:【Java】Webアプリケーションとは? 【Java】サーブレット(Java Servlet)


GETとPOSTとは?


Webアプリケーションの学習をしているとGETとPOSTが出てきますが、2つの違いは何でしょうか?

GETでもPOSTでもどちらでも同じことができてしまう事も多いと思いますが、それで問題ないのでしょうか?

実際にWebアプリケーションを構築するときに必要になる、基本的な仕様や判断基準となるポイントについて大まかに説明したいと思います。


HTTPメソッド

Webアプリケーションでのサーバとクライアント間のやりとりには基本的にHTTPというプロトコルを用います。

クライアントからサーバへの要求(リクエスト)とサーバからブラウザへ応答(レスポンス)で通信が成立しています。

このHTTPプロトコルにはいくつかの仕様が取り決められており、GET, POSTはその仕様で取り決められた、HTTPメソッドの一部です。

従って、実装したい機能がGET, POSTの仕様に沿ったものか確認し、より適しているものを使う必要があります。

Webアプリケーションの入門編では主にGET, POSTのみが紹介されている事が多いですが、HTTPメソッドは他にもHEAD/OPTIONS/PUT/DELETEなどがあります。



GET

何か情報を検索したり取得するために使うためのメソッドです。

URLの末尾に「?」マークを付け、続けて「名前=値」の形式で記述します。複数あるときは「&」で区切ります。

http://example.com/foo?name1=value1&name2=value2


  • HTTP通信で、サーバから情報を取得してくる時に使用する
  • サーバーに送信したい値をURL文字列の後ろに付与して送信する
  • 他人に見られたくない情報は、GETでは送らない(URLにそのまま表示されてしまうため)
  • 送信できるデータ量に制限がある(ブラウザにより異なる、IEの2083文字が最も少ない)
  • ブックマークに保存できる
  • テキストデータのみ送信できる(バイナリデータは送信できない)
  • マルチバイト文字や一部の文字は「URLエンコーディング」する必要がある


【URLエンコーディング
日本語などの文字は、そのままではURLで送信することができない
そのような文字をURLに付与して送信するには、パーセントエンコーディング(URLエンコーディング)という技術を使用する。
URLで扱えない文字を「%xx」(xx:16進数)で表現する
XXの部分は、使用する文字コードによって異なる



POST

主に登録処理や更新処理などの書き込みがあり、リソースが更新される可能性のある処理に対して使うメソッドです。

HTTPリクエスト内のメッセージボディにデータを含めて送ります。

  • データのソート、更新、削除、新規登録などで使用する
  • データ量が多い場合(GETでのデータ送信量制限を超えてしまう場合)
  • バイナリデータを送信したい場合
  • 他の人に見られたくない情報を送る場合(パスワードなど)


POSTの場合、URLにデータが表示される事はありませんが、暗号化されていない通信では、通信を傍受された場合にデータの中身は丸見えになります。安全にデータのやり取りをする場合は、最低でもHTTPS(SSL)での通信が必要になります。



実際の使い分け

GETとPOSTの制限や特徴から、実際に使うメソッドを選択する事になりますが、クライアントからWebサーバに値を渡す必要がある場合は、できる限りPOSTメソッドを使った方が良いでしょう。

POSTメソッドが使えない場合や、使うと不都合が生じるときのみGETメソッドを使うようにします。

検索結果を共有したい場合や、特定のデータを参照したい場合などは、GETを使ってURLを共有したり、リンク埋め込んだりします

実際にWebアプリケーションを構築する場合でも機能によって様々な要件が出てきますので、利用シーンに合わせて適切なHTTPメソッドを使い分けるようにしましょう。


今回紹介しなかったGET,POST以外のHTTPメソッドなど、HTTPの仕様についてはRFCという技術仕様でまとめられています。難しそうなことが書いてありますが、興味のある方はこちらも覗いてみてください。(RFC7231





関連記事:【Java】Webアプリケーションとは? 【Java】サーブレット(Java Servlet)



【著者】

新田

JavaメインのWebアプリケーション開発に多く携わっています。
Javaの基本的な部分の紹介や、これまで経験したシステム開発手法、新しい技術についても紹介していこうと思います。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様