FORM の method 属性には get と post が指定できます。それぞれの違いについて書いておきます。
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 メソッドが使われます。データは URI の一部ではなく、独立した本文として送られますので、よほどのことがない限り切られることはありません。
それぞれの場合においてどのようにしてデータが送られるのか、例を以下に掲げておきます。いずれも InternetExplorer 5.0 が送出したものです。
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¶m=value…… の形で付加されています。
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 フィールドが送られています。