[1] Webアプリケーションでは、 URL のクエリー引数や要求本体で
application/x-www-form-urlencoded 形式で指定された名前と値の組のことを引数と呼ぶことがよくあります。
[2] Webサーバーが URL query や要求本体をどう解釈するかは完全にサーバー依存です。 Webアプリケーションフレームワークなどで独自の制約を課していることもありますが、 その制約もそれぞれです。
[3] 多くの場合には、 HTML からのフォームの提出を受け取ることを考慮して、 次のように解釈する実装となっているようです。
GET メソッドのとき、 URL query があれば、
application/x-www-form-urlencoded の名前と値の組と解釈します。POST メソッドのとき、Content-Type: が application/x-www-form-urlencoded
なら、その形式の名前と値の組と解釈します。Content-Type: が multipart/form-data
なら、その形式の名前と値または名前とファイル名とファイル内容の組と解釈します。[13] フォームの提出だけでなく、引数 (OAuth 1.0) や引数 (OAuth 2.0) もこれと整合性のある動作となっています。
[8] 細かい動作には、色々なバリエーションがあります。例えば、
次のような違いがあります。POST でも、 URL query を引数として解釈する場合があります。POST で Content-Type: がその他のものであるときに、
URL query を引数として解釈する場合があります。POST のとき、 Content-Type:
を無視して application/x-www-form-urlencoded として解釈する場合があります。application/x-www-form-urlencoded の組の区切りの &
だけでなく、 ; も区切りと解釈する場合があります。_charset_ 依存、独自の文字コード指定引数依存など、
いろいろな方法が使われています。
[15] GET (と HEAD) と POST 以外でどう動作するべきかはあまり明確ではありません。
フォームの提出ではこれら以外の要求メソッドを使いませんから、基準となる動作がありません。
もっとも、これら以外の要求メソッドを使う必要がある場面もそう多くなさそうです。
param_body 欄が真の要求メソッドが、
要求本体を引数として解釈するべきと思われるものです。
POSTの時だけ要求本体を引数として扱い、 それ以外は URL query のみ引数とするのが良さそうです。