HTTPについて
今更って感じですが、Webアプリケーションを開発する上でHTTPの理解ってやっぱり必須だなって最近、再認識しました。(Webアプリ開発経験者でも、人によっては知らない人もいるってのが自分としてはビックリだったんだけど・・・)
最近はフレームワークがどんどん高度化して、それを利用するとGETとPOSTをあまり意識することがないため、なんとなくでも作れちゃう?!
というわけで、自分自身のおさらいも兼ねてGETとPOSTの違いを簡単に明記。
とはいえ、自分もそこまで深くHTTPを勉強したわけじゃないから、なんとなくで・・・(間違ってたらごめんなさい。本とか見直してまで書く気になれません。)
【GETメソッド】
一般的にはWebサーバからコンテンツを取得するためのメソッドで、例えば「'www.hoge.jp'」というサイトにアクセスするとHTTPの通信ログは次のようになると思います。
GET http・・・.hoge.jp HTTP/1.1
・・・(以下メッセージボディ)
GETメソッドを使ってパラメータをサーバへ渡す場合はURLの最後に"?"が付いて、後はクエリ文字列が列挙されます。
例 GET http・・・.hoge.jp?param1=car¶m2=engine HTTP/1.1
クエリ文字列は「パラメータ=値」のフォーマットになっていて、パラメータが複数ある場合は"&"で区切ります。(Googleで検索したときにアドレスバーをみるとよくわかると思います。)
GETメソッドはパラメータをURLにつなげてリクエストとしてサーバへ送信するため、セキュリティ上の問題もありますが、(記憶があいまいですが)古いサーバの場合は、あまり長いクエリ文字列を送信することができなかったと思います。
ではPOSTメソッドでの値受渡しはどうかというと、
【POSTメソッド】
POSTメソッド利用時のHTTP通信は次の様になっています。
POST http・・・.hoge.jp/xxx/yyy HTTP/1.1
・・・
param1=car¶m2=engine
なにが違うかっていうと、POSTメソッド利用時は受け渡すクエリ文字列をHTTPメッセージボディ部に記述している点です。
クエリ文字列のフォーマットは同じですが、メッセージボディ部に記述しているため、特に長さに関しては制限がないといったところだと思います。
まあ、だから何って感じですが、知っておくと、いざってときに役立つかも・・・。
じゃあGETメソッドの利点ってなにって言うと、クエリ文字列をURLに記述するため、一度検索したページをブックマークしておいて、別の機会に再現する様な場合にはよいかと。
でも、これもJBoss seamだとフレームワークである程度吸収しちゃってるから、、、冒頭で必須かなって再認識したきになってたけど、書いててやっぱり特に知らなくても良いのかなぁ〜って気もしてきた。もう、そんなことを意識しなくてもいい時代になっちゃったのかな・・・。