HTML <form> method属性

定義と用法

method 属性はフォームデータの送信方法を指定します(フォームデータはaction属性で指定されたページに送信されます)。

フォームデータはURL変数(method="get"を使用)またはHTTP POSTトランザクション(method="post"を使用)として送信できます。

GETに関する説明:

  • フォームデータを名前/値ペアの形式でURLに付加します
  • URLには長さ制限があります(約3000文字)
  • GETを使用して機密データを送信しないでください!(URLで表示されます)
  • ユーザーが結果をブックマークに追加したいフォームのサブミットには非常に役立ちます
  • GETは非安全データ、例えばGoogleのクエリ文字列に適しています。

POSTに関する説明:

  • HTTPリクエストの正文にフォームデータを追加します(データはURLに表示されません)。
  • サイズに制限はありません。
  • POSTで送信されたフォームは、ブックマークに追加できません。

例1

「get」メソッドを使用してフォームを送信する:

<form action="/action_page.php" method="get">
  <label for="fname">名:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">姓:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <input type="submit" value="送信">
</form>

自分で試してみる

例2

「post」メソッドを使用してフォームを送信する:

<form action="/action_page.php" method="post">
  <label for="fname">名:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">姓:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <input type="submit" value="送信">
</form>

自分で試してみる

構文

<form method="get|post">

属性値

説明
get デフォルト。フォームデータを名前/値の形式でURLに付加します:URL?name=value&name=value。
post フォームデータをHTTP POSTトランザクションとして送信します。

method属性の詳細

ブラウザは method 属性で設定された方法でフォームのデータをサーバーに処理するために送信します。方法は二つあります:POSTメソッドとGETメソッド。

POSTメソッドを使用するときは、ブラウザがデータを送信する際には以下の二つのステップに従います。まず、ブラウザは action 属性で指定されたフォーム処理サーバーと接続を確立し、接続が確立された後、ブラウザはデータをサーバーに分割転送する方法でデータを送信します。

サーバーサイドでは、POSTスタイルのアプリケーションが実行されるときは、パラメータを読み取るべき位置から読み取り、パラメータを読み取るときは、これらのフォーム値を使用する前に、これらのパラメータをデコードする必要があります。ユーザー特定のサーバーは、アプリケーションがこれらのパラメータを受け入れる方法を明確に指定します。

もう一つの方法は GET メソッドを使用することで、その場合、ブラウザはフォーム処理サーバーと接続を確立し、すべてのフォームデータを一つの転送ステップで送信します:ブラウザはデータを直接フォームの action URL の後に付加します。これらの間にはクエスチョンマークで区切ります。

一般的なブラウザは上記のどちらの方法でもフォーム情報をトランスミッションできますが、一部のサーバーはその中の一方の方法で提供されたデータのみを受け入れます。フォームタグのmethod(方法)属性で、フォーム処理サーバーがデータを処理するために使用する方法を指定することができます。POSTまたはGETのどちらかを選択します。

POSTかGET?

フォーム処理サーバーがPOSTメソッドとGETメソッドの両方をサポートしている場合、どちらのメソッドを選択するべきか?以下にその方針についていくつかの規則があります:

  • 最適なフォームのトランスミッションパフォーマンスを得るために、少数の短いフィールドを持つ小さなフォームをGETメソッドで送信することができます。
  • 一部のサーバーオペレーティングシステムは、アプリケーションに直接渡すことができるコマンドラインパラメータの数と長さを制限します。このような場合、多くのフィールドや長いテキストフィールドを持つフォームがある場合、POSTメソッドを使用して送信する必要があります。
  • サーバーサイドフォーム処理アプリケーションの経験が不足している場合、GETメソッドを選択することをお勧めします。POSTメソッドを使用する場合、読み取りとデコードのために追加の作業が必要であり、それは難しくないかもしれませんが、これらの問題を処理することを好まないかもしれません。
  • セキュリティが問題である場合、POSTメソッドを選択することをお勧めします。GETメソッドはフォームパラメータを直接アプリケーションのURLに含めるため、ネットワークのスニッピング者は簡単にキャプチャし、サーバーのログファイルからも簡単に抽出できます。パラメータにクレジットカードアカウントなどの機密情報が含まれている場合、ユーザーのセキュリティが無意識に危険にさらされます。一方、POSTアプリケーションにはセキュリティの脆弱性はなく、パラメータをサーバーに処理するための独立したトランザクションとして送信する際には、少なくとも暗号化方法を采用することができます。
  • フォームの外からサーバーサイドアプリケーションを呼び出し、そのパラメータを渡すプロセスを含めたい場合、GETメソッドを使用する必要があります。なぜなら、このメソッドはフォームなどのパラメータをURLの一部として含めることができます。一方、POSTスタイルのアプリケーションは、URLの後にブラウザからの追加のトランスミッションプロセスが存在し、その内容が伝統的な<a>タグの内容として扱われないことを望んでいます。

パラメータを明確に渡す

前述のアドバイスは、この方法を選択する理由の一つとしても考えられます。仮に非常に単純なフォームがあり、その中にxとyの2つのパラメータのみが含まれているとします。これらの要素の値をエンコードする際の形式は以下のようになります:

x=28&y=66

フォームがmethod=GETを采用している場合、サーバーサイドアプリケーションを参照するURLは以下のようになります:

http://www.example.com/example/program?x=28&y=66

いつでも伝統的な<a>タグを作成することができます。それを使って、以下の形式で必要なパラメータを持つフォームを呼び出すことができます:

<a href="http://www.example.com/example/program?x=28&y=66">

問題は、パラメータを区切るために使用される & シンボルが、文字エンティティの中のインサートシンボルでもあることです。<a>タグのhref属性に&シンボルを入れると、ブラウザはその後の文字を対応するエンティティに置き換えます。

このような状況を避けるために、& シンボルをそのエンティティの等価物で置き換える必要があります、つまり「&」または「&」で置き換えます。置き換え後、上記の非フォームのサーバーアプリケーションの参照は以下のようになります:

<a href="http://www.example.com/example/program?x=28&y=66">

URL で & シンボルを使用することができないため、将来の混乱を避けるために、サーバーは最終的に分号を使用してパラメータを区切ることを推奨します。サーバーがこの機能をサポートしているかどうかを確認するには、サーバーのドキュメントを確認してください。

ブラウザのサポート

Chrome Edge Firefox Safari Opera
Chrome Edge Firefox Safari Opera
サポート サポート サポート サポート サポート