URLでは、パラメータとクエリ文字列の間に大きな違いはありません。それでは違いは何ですか、そして、いつ誰がその上で使われるべきですか?
クエリコンポーネント は、URIの最初の?
によって示されます。 「クエリ文字列」は同義語である可能性があります(この用語はURI標準では使用されていません)。
クエリコンポーネントを含むHTTP URIの例
http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b
クエリコンポーネントの「フォーマット」は、URIの作成者次第です。一般的な慣習( ただしURI標準に関する限り、慣習に過ぎません ¹)は、キーと値のペアに別のクエリーコンポーネントを使用することです。 パラメータ、上の最後の例のように:bar1=a&bar2=b
。
そのようなパラメータは他のURI構成要素、すなわちパス2およびフラグメントにも現れ得る。 URI標準に関する限り、どのコンポーネントとどのフォーマットを使用するかはあなた次第です。
パス、クエリ、およびフラグメントにパラメータを含むURIの例:
http://example.com/foo;key1=value1?key2=value2#key3=value3
¹URI規格では、 クエリコンポーネントについて :となっています。
[…]クエリコンポーネントは、「キー=値」のペアの形式で識別情報を伝えるためによく使用されます[…]
²URI規格では、 パスコンポーネントについて :となっています。
[…]セミコロン( ";")と等号( "=")の予約文字は、そのセグメントに適用可能なパラメータとパラメータ値を区切るためによく使用されます。コンマ( "、")の予約文字は、よく似た目的で使用されます。
パラメータはURLパスの内側に表示されるキーと値のペアで、セミコロン文字(;
)で始まります。
クエリ文字列はパスがある場合はパスの後に表示され、疑問符(?
)で始まります。
パラメータとクエリ文字列の両方にキーと値のペアが含まれています。
GET
リクエストでは、パラメータはURL自体に表示されます。
<scheme>://<username>:<password>@<Host>:<port>/<path>;<parameters>?<query>#<fragment>
POST
リクエストでは、パラメータはURL自体に表示されますが、データストリームにも表示されます(contentとして知られています)。
クエリ文字列は常にURLの一部です。
POSTメソッドを使用する場合、パラメータはform-data
データストリームに埋め込むことができるため、URLに表示されない場合があります。はいPOST
リクエストはURLの中でフォームデータととしてパラメータを定義することができます、そしてパラメータが複数の値を持つことができるのでこれは矛盾しません。
私はこれまでのところこの動作について説明していません。 POST
リクエストからパラメータを「隠さない」、あるいはGET
リクエストを処理するコードにPOST
を処理するコードと一部の部分を共有させることさえも時々役に立つかもしれません。もちろん、これはURLのパラメータをサポートするサーバーコードでのみ機能します。
より良い洞察を得るまでは、POST
リクエストのform-data
データストリームでのみパラメータを使用することをお勧めします。
出典: