FORM の method による違い

GET と POST

FORM の method 属性には get と post が指定できます。それぞれの違いについて書いておきます。

GET

get が指定されていると、フォームの送信時には GET メソッドで要求を出します。具体的には、action 属性に指定した URI に ? をつけ、その後にデータをくっつけて、その URI を要求します。データは URI として送られ、それを受け取ったサーバは ? 以降を環境変数に入れて CGI のプログラムに渡します。実装上、URI の長さや環境変数の長さに制限がある場合、長いデータを送ろうとすると切れてしまうことがあります。掲示板への書き込みのように、大量のデータを送る必要がある場合には向きません。

また、FORM を使わずに <a href="http://hpcgi1.nifty.com/bakera/dk2/jump.cgi?no=12017"> のような記述で CGI にデータを送信することも出来ますが、この場合もメソッドは GET になります。

POST

post が指定されていると、POST メソッドが使われます。データは URI の一部ではなく、独立した本文として送られますので、よほどのことがない限り切られることはありません。

HTTP要求ヘッダの例

それぞれの場合においてどのようにしてデータが送られるのか、例を以下に掲げておきます。いずれも InternetExplorer 5.0 が送出したものです。

FORM method="get" の場合

GET /cgi-bin/dk2/test.cgi?a=alpha&b=beta HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */*
Referer: http://127.0.0.1/cgi-bin/test.cgi
Accept-Language: ja,en;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)
Host: 127.0.0.1
Connection: Keep-Alive

普通にリソースを取得するときのと同様、GET メソッドで要求を出しています。フォームのデータは URI の後部に ?param=value&param=value…… の形で付加されています。

FORM method="post" の場合

POST /cgi-bin/test.cgi HTTP/1.1
Accept: */*
Referer: http://127.0.0.1/cgi-bin/test.cgi
Accept-Language: ja,en;q=0.5
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)
Host: 127.0.0.1
Content-Length: 14
Connection: Keep-Alive

a=alpha&b=beta

こちらは POST メソッドを使っています。データは URI の一部として送られるのではなく、ヘッダとは別に本文として送られています。また、データの長さを示す Content-Length フィールドが送られています。


ばけらのHTMLリファレンス - フォームとコントロール

ばけらのHTMLリファレンス

HTML鳩丸倶楽部

水無月ばけら, MINAZUKI Bakera
E-mail: bakera@star.email.ne.jp