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

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

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

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

POST

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

Q&A

解決済

3回答

6760閲覧

POSTとGETについて

panjaA

総合スコア67

GET

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

POST

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

0グッド

1クリップ

投稿2017/08/10 15:58

①GETはなにかを取得するときに使うべきもの。
POSTはなにかを新しく登録するときに使うもの。
と聞いたのですが

私はgetはurlの後ろにパラメータを付与してhttprequestをする。postはパラメータをbodyに含めてhttprequestをする。と認識しています。すると、①の説明が意味がわかりません。

なにか私は勘違いをしているのでしょうか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

URIとは何か HTTPメソッドとは何か というところを理解する必要があります。

URI(URL)とは世界中のリソースを特定するための識別子です。
Uniform Resource Identifierの略です。URLのLはLocatorです。

http://www.piyo.com というサイト(サーバー)があったとしてユーザ情報を管理するURLが
http://www.piyo.com/users
だったとします。

ここでusersリソースを管理するには
・新規でIdを発行したいのか(登録)
・Idが1のユーザ情報を取得したいのか(取得)
・Idが1のユーザを更新(置換え)したいのか(更新)
・Idが1のユーザを削除したいのか(削除)

という操作を行う必要があります。この操作をCRUD(Create,Read,Update,Delete)といいます。
つまりURLに対してどの操作をするのか ということをHTTPメソッドPOST,GET,PUT,DELETEで行うのです。

・新規でユーザIdを発行(*注1)する場合
POST /users

・Id=1のユーザを取得する場合
GET /users/1 または GET /users?id=1

・Id=1のユーザを更新(*注2)する場合
PUT /users/1 または PUT /users?id=1

・Id=1のユーザを削除する場合
DELETE /users/1 または DELETE /users?id=1

となるのです。

お気づきでしょうか? GET,PUT,DELETEの場合のURLは同じなのです。

これが本来のURLの考え方なのです。
/users/1 というId=1のユーザに対して、どういうアクション(取得、更新、削除)するかというそれだけなのです。

*注1 ここでPOSTの意味をもう少し詳しく説明します。
新規登録ということはまだユーザIdは発行されていません。つまり今登録しようとしているユーザを表すURLは存在していません。
なのでユーザ全体を表す /users というリソースに対して、新規発行(POST)を行い、
新しいURLを生成することがPOSTの本来のあるべき姿です

URLはリソースを表すので、これから登録するデータをURLに含めることはできません(本来のURLの使い方ではありません)
たとえばname=hanako&birthday=1900-01-01 といった情報をURLに含めて情報を登録するのは使い方としては間違っています。くどいようですがURLはリソースを表すのです。
ですので bodyにデータを入れて 登録したいリソースの集合を表すURLにPOSTするのです。

*注2

更新はPUTを使うのですがPUTの役割は更新だけではありません。実は登録または更新なのです。

POSTの登録とどう違うのか、というところですが
POSTの場合idの生成をサーバーが行うのでPOSTをすることで初めて新しいURLが生成されます。
ですがURLを叩く側が独自にURLを指定できる場合、新規登録でもPUTを使うのです。
たとえばお使いのコンピュータのファイルシステムの特定のフォルダにファイルを新規作成した場合
C:¥Users¥piyo¥Documents¥新しいファイル.txt
これはURIを指定してファイルを新規作成しているのでPUTなのです。

更新にはPUTだけではなくPATCH(一部データの書き換え)というメソッドも存在します。
PUTはファイル全体を上書きするイメージ(同じファイル名で上書き)
PATCHはファイルを開いてテキストを修正して保存するイメージです。

まとめ

URLのQueryString ?param=value はGETでしか使えない(使わない)というのは間違いです。
データをサーバーに送る(登録、更新、削除)ものをすべてPOSTというのは誤用です。

投稿2017/08/10 16:55

編集2017/08/11 02:48
Tak1016

総合スコア1408

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

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

panjaA

2017/08/11 01:21

urlはリソースを表すと考えるとgetやPOSTの違いがわかりました。 ありがとうございます!
guest

0

GET はサーバから取得するデータを絞り込む為にパラメータを付与します。POST はサーバにデータを送り込みます。
また GET で送り込めるのはクエリ(URLの後ろのパラメータ)だけですが、POST はクエリ形式に限定されているわけではありません。

どちらも結果を取得する事にはなるのですが、サーバは POST で送り込まれた内容を解析してデータベースに登録するなどを行います。

なぜそれを GET でやならいのかと思われるかもしれません。もちろん GET でもデータ登録をやろうと思えばできます。ただ GET は例えば URL が書かれた文書をクリックしブラウザが起動しただけでデータが登録されてしまいます。POST はそういった事がありません。

単なるクライアントとサーバとの間の取り決め(HTTPプロトコル)です。

投稿2017/08/10 16:17

mattn

総合スコア5030

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

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

panjaA

2017/08/11 01:18

ありがとうございます!
guest

0

むかしむかしのHTMLしかない時代は GET でHTMLページを取得してました ・・・ ①
そのうちデータ登録したいな!ファイルのアップもしたいな!ということから
フォーム概念が生まれてデータを送信する機能が追加されました ・・・ ②
と、私は理解しています。

① でもデータを送り込むことはできますし、②でもページは取得できます。
なので、panjaA さんの解釈は間違っていません。

ただ ① でデータを送り込むと
・環境変数にセットされるので格納文字数に制限がある(大量データの送り込みに難あり)
・格納したいデータが外部にさらされる(ブックマークとかログにデータが落ちる)
といった制約があるので危険なデータは①であえて送信させません。

→ 情報漏洩リスクが無い機能 かつ データの意味が変わらない
(検索の絞り込みとか)で利用します

お聞きになられた①の説明では「ページの取得」という意味にも取れますので
双方あってるかと。

認識は間違ってないので気にしなくても良いかと思います。

投稿2017/08/10 20:03

kurosawa

総合スコア780

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

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

panjaA

2017/08/11 01:18

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問