GETとPOSTは通信方法が異なる!
フォームデータのやり取りをした場合、GETとPOSTはどちらが優れているのか?
イコール"POSTは制限がないため、GETより優れている!"という見解。
しかしGETで使用するURLの長さについて規定しているRFC2616規定では「HTTPはプロトコルとしてURIの長さを制限しない」としている。
URIとは、インターネット上に存在する情報の場所を指し示す言葉でURLはURIの機能の一部とみなせる。
なぜ制限がないのに冒頭のような話がたびたび登場するのか?
実は制限がかかっているのはHTTPの仕様ではなく、WEBサーバーもしくはクライアントであるWEBブラウザの仕様である。
代表的なWEBサーバーであるApatchは、初期設定8190バイトまでのURIを処理できる。
この制限はApatchの設定変更で更に大きくできる。
ちなみにサーバーが処理できる上限を超えたURIを受け取った場合、
「414 Request-URI Tool Long」というレスポンスを返す。
しかし一般的なWEBサイトで414レスポンスを受け取ることはまずない。
論文のような長いテキストをURLで送信する特別な場合でない限り、GETを使ってもデータ長の問題で動かないことはない。
GETは、POSTと違ってブラウザにフォームデータがそのまま表示されるため、安全面でPOSTが優れているという見解もおかしい。なぜなら、TCPモニタリングソフトを利用すれば、メッセージボディも含めて送信内容はキャプチャできる。
もし「安全性」を言及するのであれば、SSL通信を使うべきで、POSTならば安全という理由にはならない。確かに誰が使うか不明の端末で、ブックマーク表示時や履歴表示の際にURL欄にフォームデータが表示されない点では若干安全ではあるが…
一方、フォームデータが表示された方がいい場面もある。
例えば、地図の位置情報や不動産の物件検索結果などをメールで送信する場合、GETを用いてURLにフォームデータが含まれていることで利便性が上がる。
このように他者に情報を伝えることを考えれば、GETによる表示は利便性が高いことがわかる。
一方POSTで送信すれば、閲覧者側でデータを改ざんしたり、ブラウザのURL欄からフォームを経由せずに直接サーバーサイドのプログラムを呼び出したりできないメリットはある。
複数ページにわたってフォームデータを持ち続けているようなケースは、GETの場合「戻る」ボタンを使っても問題は起きないが、POSTの場合、「データを送信しますか?」というメッセージが表示される。
アンケートサイトのように、数ページを遷移して進む構成のサイトでは「途中で戻れません」と書かれていることが多いが、これはPOSTを使っているためだ。
つまりGETとPOSTは一長一短であり、「適材適所」というのが答えだ。
最後に…
もしどちらかが「優れている」のであれば、劣っている方は淘汰されているはず。
両者に生き残っているということは優劣はないということである。
フォームデータのやり取りをした場合、GETとPOSTはどちらが優れているのか?
GETメソッドはPOSTより劣る!?
"GETは転送量に制限を受けるため、POSTより劣る"という意見がある。イコール"POSTは制限がないため、GETより優れている!"という見解。
しかしGETで使用するURLの長さについて規定しているRFC2616規定では「HTTPはプロトコルとしてURIの長さを制限しない」としている。
URIとは、インターネット上に存在する情報の場所を指し示す言葉でURLはURIの機能の一部とみなせる。
なぜ制限がないのに冒頭のような話がたびたび登場するのか?
実は制限がかかっているのはHTTPの仕様ではなく、WEBサーバーもしくはクライアントであるWEBブラウザの仕様である。
代表的なWEBサーバーであるApatchは、初期設定8190バイトまでのURIを処理できる。
この制限はApatchの設定変更で更に大きくできる。
ちなみにサーバーが処理できる上限を超えたURIを受け取った場合、
「414 Request-URI Tool Long」というレスポンスを返す。
しかし一般的なWEBサイトで414レスポンスを受け取ることはまずない。
論文のような長いテキストをURLで送信する特別な場合でない限り、GETを使ってもデータ長の問題で動かないことはない。
GETは、POSTと違ってブラウザにフォームデータがそのまま表示されるため、安全面でPOSTが優れているという見解もおかしい。なぜなら、TCPモニタリングソフトを利用すれば、メッセージボディも含めて送信内容はキャプチャできる。
もし「安全性」を言及するのであれば、SSL通信を使うべきで、POSTならば安全という理由にはならない。確かに誰が使うか不明の端末で、ブックマーク表示時や履歴表示の際にURL欄にフォームデータが表示されない点では若干安全ではあるが…
一方、フォームデータが表示された方がいい場面もある。
例えば、地図の位置情報や不動産の物件検索結果などをメールで送信する場合、GETを用いてURLにフォームデータが含まれていることで利便性が上がる。
このように他者に情報を伝えることを考えれば、GETによる表示は利便性が高いことがわかる。
一方POSTで送信すれば、閲覧者側でデータを改ざんしたり、ブラウザのURL欄からフォームを経由せずに直接サーバーサイドのプログラムを呼び出したりできないメリットはある。
複数ページにわたってフォームデータを持ち続けているようなケースは、GETの場合「戻る」ボタンを使っても問題は起きないが、POSTの場合、「データを送信しますか?」というメッセージが表示される。
アンケートサイトのように、数ページを遷移して進む構成のサイトでは「途中で戻れません」と書かれていることが多いが、これはPOSTを使っているためだ。
つまりGETとPOSTは一長一短であり、「適材適所」というのが答えだ。
最後に…
もしどちらかが「優れている」のであれば、劣っている方は淘汰されているはず。
両者に生き残っているということは優劣はないということである。