HTML specificationsによる定義/推奨
■ GET- データはURLに含まれる。
- idempotentな(永続的な効果をもたらさない、副作用をもたらさない)処理を行うときに使うことが推奨されている。 ⇒データを取得するときに使用する。
■ POST
- データはmessage body部分に含まれる。
- idempotentではない処理を行うときに使うことが推奨されている。 ⇒データのソート、更新、商品の注文、Emailの送信など。
実用的な違い/留意点
- GETはサーチエンジンのクローラーに踏まれる可能性があるので、副作用のある処理をGETで処理すると、不用意にデータを消去されたり、更新されたりする可能性がある。
- GETリクエストに対するレスポンスはキャッシュできる(※)場合が多い。POSTリクエストに対するレスポンスがキャッシュされることはほとんどない。
- GETはURLをブックマーク保存できる。
- GETはURLにデータが載るので、Webサーバやプロキシサーバーのログに残る。リンクで他ページに遷移したときにRefererのところにも載る。⇒パスワードなどのセンシティブな情報を送る場合はGETは避けるべき。
- GETにはASCII文字以外を含めない方がいい。(原則上は扱えないが、実用上は扱える。)マルチバイト文字をクエリーに含む検索処理の場合は、POSTを使う方が(idempotent=GETの基本精神に反するが)ベター。
- GETはPOSTより送信できる情報量が少ない。
- ブラウザの「戻る」ボタン⇒POSTは警告を上げる。GETはそのまま遷移。
(※)ちなみにキャッシュはいろいろな種類があって、
- ブラウザーキャッシュ
- プロキシーキャッシュ
- ゲートウェイキャッシュ(リバースプロキシー)
などがあります。
まとめ
基本的には、データのREAD処理の場合はGETを使い、CREATE/UPDATE/DELETE処理の場合POSTを使えばよいと思います。あとはセキュリティの観点からセンシティブな情報を送信する場合はPOSTを使うべきです。
参考サイト
0 件のコメント:
コメントを投稿