作成日:2006/05/23
2B GET/POST
GETとPOST
HTTPで、クライアント(ブラウザなど)からサーバへのデータを送信する際に最も良く使われる方法(メソッド)は GET と POST です。
- GETメソッド ------ 送信データをURLの一部としてサーバに送る
- POSTメソッド ----- HTTPボディに送信データを格納してサーバに送る
次のようなHTMLフォームを考えて見て下さい。
<form action="form.cgi" method="get"> ID <input type="text" name="id"> PASSWORD <input type="text" name="pass"> <input type="submit"> </form>
このフォームで送信ボタンを押すと、ブラウザはGETメソッドを使ってサーバにデータ( id と pass )を送信します。 また、method を "post" に変更すると、POSTメソッドを使ってサーバにデータを送信します。 以下にブラウザが送信するデータの実例を示します。
| GETメソッドを使用したデータ送信例 | POSTメソッドを使用したデータ送信例 |
|---|---|
GET /form.cgi?id=sunlight&psss=846 HTTP/1.1 Accept-Language: ja User-Agent: Mozilla/4.0 Host: www.y2sunlight.com Pragma: no-cache (空行) |
POST /form.cgi HTTP/1.1 Accept-Language: ja User-Agent: Mozilla/4.0 Host: www.y2sunlight.com Pragma: no-cache (空行) id=sunlight&psss=846 |
上例の「id=sunlight&psss=846」が送信データです。
実際にはsubmitボタンの値も送信されますが、ここでは省略しています。
GETメソッドでの送信データ (「?」以下の文字列 ) はクエリ文字列(Query String)と呼ばれ、
CGIプログラミングでは環境変数 QUERY_STRING から取得できます。
また、CGIではPOSTメソッドの送信データを標準入力から読み込む事ができます。
PHPではこれらの送信データを定義済み変数( $_GET や $_POST )を使って取得します。
この例で分かるようにGETメソッドでは大きなデータは送信できません ( 環境により異なりますがリクエストURLの上限はせいぜい1Kバイト程度です )。 また、秘匿したいデータがブラウザのURLに現れてしまうなどの問題があります。 しかし、GETメソッドは現在でも比較的よく使用されている方法です。
クエリ文字列
クエリ文字列とは、URLに含まれる「?」以下の文字列で、一般に以下の形式を取ります。 GETメソッドはクエリ文字列を使ってサーバにデータを送信します。
- クエリ文字列:
- クエリ変数=値 [&クエリ変数=値] [・・・]
- クエリ変数が複数ある場合は、アンパサンド(&)で区切られます。
- クエリ変数及び値はURLエンコードされている必要があります。 ( 「HTTP/HTML URL関数」を参照して下さい )
