前回の投稿で、「GETとPOSTはどっちが優秀?」って記事を書いたけど、
で、答えは「併用できる」だった。
それほど難しい仕組みでもないし、知ってしまえば「そうだよね!」ってことだけど、
意外に最初は!?!?って感じだったので、備忘録のために残す。
フォーム要素の指定は、どちらかひとつ
まずフォーム要素を指定する場合には、
"method=GET,POST"などの書き方は存在せず、エラーになる。
では、「併用できない」ではないか!と思った方!
焦らずに次の行を見てください。
ただし、あくまでもフォームからの送信にはmethod="POST"が有効で、メッセージボディに含まれる形でGET引数を受け取ることになる。
POSTとGETのハイブリット型データ送信と言える。
HTTPヘッダーの中身を確認するとわかるが、リクエストそのものはフォームが"POST"メソッドで送信していることがわかる。しかし、遷移後の"sample.php"のブラウザURL欄には「http://.../sample.php?str=ABC」になる。
実際、サーバサイド処理において、このハイブリット形式はGET分のデータもPOST分のデータも問題なく処理できる。
また、フォームからの送信データ、特にPOSTで送られたモノについては、PHPなどのサーバサイドしか処理できないが、GET引数に関してはクライアント側のJavaScriptで取得して処理することも可能。
GETではユーザが設定したデザインや配色を伝えつつ、POSTでフォーム内容を送信するといった使い方や、GET/POSTの仕組みを組み合わせて片方を暗号化キーとして使用することなど、アイデア次第で面白い利用方法もある。
最後に…
特殊なサーバー環境やブラウザは不要で、あることも分かったと思う。
そもそも"GET"と"POST"は併用はできないのだろうか??
って疑問が浮かんだので調べてみた!で、答えは「併用できる」だった。
それほど難しい仕組みでもないし、知ってしまえば「そうだよね!」ってことだけど、
意外に最初は!?!?って感じだったので、備忘録のために残す。
フォーム要素の指定は、どちらかひとつ
まずフォーム要素を指定する場合には、
のようにGETかPOSのいずれかしか指定できない。
<form method="GET">
"method=GET,POST"などの書き方は存在せず、エラーになる。
では、「併用できない」ではないか!と思った方!
焦らずに次の行を見てください。
この記述はどうだろうか?
<form method="POST" action="sample.php?str=ABC">
methodに"POST"、メッセージボディに"GET"引数を追加
HTMLでは、のようなフォーム要素の記述ができるため、action属性に「?」から始まるGET引数を付与することで、GETとPOSTの両方が有効になる。
<form method="POST" action="sample.php?str=ABC">
ただし、あくまでもフォームからの送信にはmethod="POST"が有効で、メッセージボディに含まれる形でGET引数を受け取ることになる。
POSTとGETのハイブリット型データ送信と言える。
HTTPヘッダーの中身を確認するとわかるが、リクエストそのものはフォームが"POST"メソッドで送信していることがわかる。しかし、遷移後の"sample.php"のブラウザURL欄には「http://.../sample.php?str=ABC」になる。
実際、サーバサイド処理において、このハイブリット形式はGET分のデータもPOST分のデータも問題なく処理できる。
また、フォームからの送信データ、特にPOSTで送られたモノについては、PHPなどのサーバサイドしか処理できないが、GET引数に関してはクライアント側のJavaScriptで取得して処理することも可能。
GETではユーザが設定したデザインや配色を伝えつつ、POSTでフォーム内容を送信するといった使い方や、GET/POSTの仕組みを組み合わせて片方を暗号化キーとして使用することなど、アイデア次第で面白い利用方法もある。
最後に…
特殊なサーバー環境やブラウザは不要で、あることも分かったと思う。