web-dev-qa-db-ja.com

URLパラメータとクエリ文字列の違いは何ですか?

URLでは、パラメータとクエリ文字列の間に大きな違いはありません。それでは違いは何ですか、そして、いつ誰がその上で使われるべきですか?

55
Konst

クエリコンポーネント は、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規格では、 パスコンポーネントについて :となっています。

[…]セミコロン( ";")と等号( "=")の予約文字は、そのセグメントに適用可能なパラメータとパラメータ値を区切るためによく使用されます。コンマ( "、")の予約文字は、よく似た目的で使用されます。

49
unor

パラメータは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データストリームでのみパラメータを使用することをお勧めします。

出典:

すべての開発者がURLについて知っておくべきこと

RFC 3986

16