アイフルのサイトです。
ネット 住まい 驚異 左右 株価 計画 請求 プライア SUMCO 別段 議論 大きい 知っ ガイドライン 旅行 労働 申し込み レンタル 歩い アクセス 制限 画像 装丁 購入 捜査 返済 申し込み 検証 地獄 買い

送信とは?/ アイフル

[ 524] フォームデータの送信 -- ごく簡単なHTMLの説明
[引用サイト]  http://www.kanzaki.com/docs/html/htminfo32.html

ブラウザからのデータデータは、特別な形式でエンコードされて送信されることになっています。画面に表示されるフォームのコントロールで入力する以外にも、隠されたデータの情報を送ったり、フォームを使わずに送信するなど、いくつかの方法があります。
input要素などで用意する「コントロール」はユーザーがそれを操作してデータを入力するためのものです。しかし、場合によってはHTMLの制作者が指定したデータをプログラムに送信したい場合もあるでしょう。このようなデータはユーザーが操作する必要はなく、ユーザーの目に触れないほうが都合がよいものです。そのために、input要素のタイプの一つとしてhidden型が用意されています。
このような情報をフォームに書きこんでおくと、ユーザーの目に触れることなく「info」という名前と「secret」という値を持ったデータがプログラムに送信されます。汎用のプログラムに特定の動作をさせたい場合などに使います。
このようにして用意したコントロールは、普通のコントロールと同様に表示されますが、内容を編集することができません。
フォームのコントロールを通して入力されたデータは、送信命令(submit型のinput要素)によってサーバーに送られます。そのとき、英数字以外のデータは利用者が入力したそのままの形ではなく、%と数字やアルファベットで構成されたURLエンコード形式という形に変換され、およそ次のようなイメージになります。
送信してもページが更新されないので、利用者は何かエラーが生じたと思い、何度も送信してしまう可能性がある(適切な説明が必要)
CGIを必要としない手軽な方法なので、フォームの練習や「訪問記念」ボタンには手頃ですが、本格的なデータ送信にはあまり適さないでしょう。
input要素のtype属性をfileとすると、ファイルを選択するためのコントロールを用意することができます。このタイプを用いて、ファイルの中身をフォームのデータとして送信することができます。
このエンコードで送られたフォームのデータは、URLエンコードではなく、次のようなMIMEのマルチパートデータとしてプログラムに届きます。
このエンコードをmailtoアクションと組み合わせると、MIMEの添付ファイルの形式でフォームの内容をメール送信できることもあります。うまく機能すれば、CGIを使わなくても日本語を記述したフォームをメール送信させられそうですが、期待通りに働くかどうかはブラウザ次第で、文字化けする可能性もあります。
つまりgetを使うとデータはURLの一部として送られるわけです。「URLエンコード」とは、データをURLに埋め込んでも問題が生じないように、英数字以外の文字や/などの記号を安全な形に変換することを意味します。サーバーは受け取ったURLを ? を境に分割し、その前半に示されているプログラムを呼び出して、後半の値(フォームの内容=クエリ)を処理データとして渡します。
POSTの場合は、このリクエスト行にはデータの内容は書き込まれず、これに続く本体(エンティティ)にデータが入って送信されます。
postメソッドはメッセージの投稿、データベースへのデータの追加などを処理する方法として用意されており、必ずしもHTMLファイルのような情報を取り出すことを目的としていません。
getはその名の通り、何かをゲットする(取り出す)のが本来の役割です。データベースにキーワードを送って検索結果を「取り出す」などのためにgetを用います。
getを使った場合、その結果はクライアントのディスクにキャッシュされ、次回以降はそのキャッシュの内容を利用することが期待されているので、(少なくとも短期的には)同じクエリによるリクエストに対しては同じ結果を返さなければなりません。また、getはクエリがURIの一部になるため、それがそのままブックマークされたり、リンク先として用いられたりする可能性もあります。
postは「投稿する」を意味します。メッセージの書き込み、新規データの登録など、何かをプログラムに送って内容を書き換えるような場合はpostを使わなければなりません。
getのクエリはサーバーの環境変数を経由してCGIに渡されるので、非常に長いデータを送るのには向きません。上限はサーバーによって違いがありますが、せいぜい数KB程度なので、texarea要素などで長いテキストを入力する場合はpostが適切です(一般的には、このようなケースはデータの登録であり、postの本来の定義に合致する使い方になるでしょう)。
getメソッドがURLの一部になることを応用すると、フォームを用いずにデータを直接CGIプログラムに送信することができます。たとえば、kwという名前で送ったデータをキーワードにデータベースを検索するプログラムdbase.cgiがあるとすると
という形のアンカーを用意することで、用語をクリックするとその説明をデータベースで検索して表示するような仕掛けを提供できます。

 

戻る

アイフルのサイトです。

アイフルのサイトです。