質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Q&A

解決済

3回答

6873閲覧

GETメソッドとPOSTメソッドの本質的な違い

thesnowman

総合スコア154

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

0グッド

6クリップ

投稿2019/08/18 12:32

編集2019/08/19 05:45

GETメソッドと、POSTメソッドなどの違いで1ヶ月くらい悩んでおります。

ネットなどで調べて以下のことが分かりました。

  • GETはURLに付加してリクエストし、主にデータの取得に使う。冪等、安全。
  • POSTはBodyに含めてリクエストし、主にデータの登録に使う。非冪等、非安全。

なんとなくは分かりましたが、はっきりと掴めません。
特に冪等、安全というところ。

GETでも非冪等、非安全な処理はできますし
逆にPOSTでも冪等、安全な処理はできますよね。

なぜGETは冪等、安全で
POSTは非冪等、非安全ということになっているのか教えてほしいです。


イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

GETとPOSTの使い分けは、HTTPのRFC 7231の4.2に規定されています。以下は日本語訳のリンクです。

RFC 7231 — HTTP/1.1: Semantics and Content (日本語訳)- 4.2. 共通のメソッドプロパティ

そして以下の疑問ですが、

GETでも非冪等、非安全な処理はできますし
逆にPOSTでも冪等、安全な処理はできますよね。

なぜGETは冪等、安全で
POSTは非冪等、非安全ということになっているのか教えてほしいです。

これは話が逆で、アプリケーションを書く人がこれを満たすように書け、あるいはGETやPOSTを使い分けよ、という指示です。
つまり、GETやPOSTを使い分ける基準としてこの規定があります。

投稿2019/08/18 22:19

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thesnowman

2019/08/19 05:49

ありがとうございます! webを支える技術という本でややこしい所があり混乱いてました。 (画像をアップしました。) "GET PUT DELETEが持つ素晴らしい性質(べき等性や安全性)が利用できなくなります。" という一節により、 まるでGETメソッド自体がもともと冪等で安全であると違いしてしまいました。 ですが、だいぶ理解できました。 ありがとうございます。
guest

0

なぜGETは冪等、安全で

POSTは非冪等、非安全ということになっているのか教えてほしいです。

これは話が逆です。冪等がGETで、非冪等がPOST。
RESTという考え方を調べてみてください。(RESTには、PUTやDELETEもありますが、実際にはPOSTで代用されていることがほとんどでしょう)
Wikipedia: REST

もちろん、RESTに従わない設計だと、冪等・非冪等とメソッドの関連はありません。

安全、非安全とは何の安全のことを言ってるのでしょうかね?

投稿2019/08/18 13:15

otn

総合スコア84489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

REST-APIを除いたGET/POSTに焦点を当てたWebシステムで説明します。

GETもPOSTもサーバーに対してリクエストすると言う意味では同じです。
違いは送信するデータがURL内かbody内に含まれるかの違いがあります。

GET

例えばamazonの商品検索ページ・商品ページなどはGETリクエストです。
これは、自分以外に人にURLを教えても同じ商品ページを表示させるためです。
簡単に言えばGETリクエストURLは公開しても構わないものにします。

なので主にデータの取得に使用することになります。

そして、GETリクエストURLは何度リクエストしても同じ商品ページを返します。

POST

個人情報やクレジットカードなどを含む公開したくないデータの送信をGETで行うことは危険な行為だと言うことは分かると思います。
他人に見せない情報はPOSTを利用します。

商品の購入もデータベース上では購入フラグを立てることなので主にデータの登録に使用することになります。

このPOSTリクエストを何回も繰り返すと商品がたくさん届きます。
システム作成時にはF5キー、戻るボタンなどの対策が必要です。

POSTでは対策が必要な場合があるため非安全と比喩しているとおもいます。

投稿2019/08/19 07:35

kurore

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問