前回の投稿で、「GETとPOSTはどっちが優秀?」って記事を書いたけど、

そもそも"GET"と"POST"は併用はできないのだろうか??

って疑問が浮かんだので調べてみた!
で、答えは「併用できる」だった。

それほど難しい仕組みでもないし、知ってしまえば「そうだよね!」ってことだけど、
意外に最初は!?!?って感じだったので、備忘録のために残す。

フォーム要素の指定は、どちらかひとつ
まずフォーム要素を指定する場合には、

<form method="GET">
のようにGETかPOSのいずれかしか指定できない。
"method=GET,POST"などの書き方は存在せず、エラーになる。

では、「併用できない」ではないか!と思った方!
焦らずに次の行を見てください。

<form method="POST" action="sample.php?str=ABC">
この記述はどうだろうか?

methodに"POST"、メッセージボディに"GET"引数を追加

HTMLでは、

<form method="POST" action="sample.php?str=ABC">
のようなフォーム要素の記述ができるため、action属性に「?」から始まるGET引数を付与することで、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の仕組みを組み合わせて片方を暗号化キーとして使用することなど、アイデア次第で面白い利用方法もある。


最後に…
特殊なサーバー環境やブラウザは不要で、あることも分かったと思う。