GETメソッド
HTTPで、サーバからリソースを取得するときに使うメソッド。送りたいデータは、URLの末尾にクエリ文字列として付ける。
イマシルちゃんの解説
ブラウザでページを開くときのお願いは、ほとんどがGETなんだ。
「このページをください」ってだけだからね。
検索サイトで調べ物をすると、URLの後ろに「?q=ネットワーク」みたいな文字がくっつくでしょ?
GETでは、送りたいデータをこんなふうにURLに付けて送るんだよ!
より深い解説
定義
GETは、HTTPのリクエストで、指定したリソースの取得を要求するメソッドである。送りたいデータは、URLの「?」以降に キー=値 の形で付ける。これをクエリ文字列という。複数の値は「&」でつなぐ。
GET /search?q=network&page=2 HTTP/1.1
Host: example.com
このように、データはリクエストの1行目、つまりリクエスト行に含まれる。GETのリクエストには、通常メッセージボディを付けない。
GETの性質
| 性質 | 意味 |
|---|---|
| 安全(safe) | サーバの状態を変えない、読み取り専用の操作として扱われる |
| べき等(idempotent) | 同じリクエストを何回送っても、結果が1回送ったときと同じになる |
| キャッシュできる | ブラウザやプロキシが応答を保存し、再利用できる |
| ブックマークできる | データがURLに含まれるので、URLだけで同じ要求を再現できる |
機密情報を送ってはいけない理由
GETで送ったデータはURLに含まれるため、次のような場所に残りやすい。
- ブラウザの閲覧履歴
- Webサーバやプロキシのアクセスログ
- 別サイトへ移動したときのRefererヘッダー
HTTPSで暗号化していても、通信相手の機器や手元のブラウザにはURLが残る。そのため、パスワードや個人情報の送信にはPOSTメソッドを使う。
また、URLの長さにはブラウザやサーバごとの上限があるため、大きなデータの送信にも向かない。
POSTメソッドとの比較
| GET | POST | |
|---|---|---|
| 目的 | 取得 | 送信して処理させる |
| データの入る場所 | リクエスト行(クエリ文字列) | メッセージボディ |
| べき等か | はい | いいえ |
| キャッシュ | できる | 原則できない |