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


92

URLには、パラメータとクエリ文字列の違いはあまり見られません。では、違いは何ですか?また、どちらをいつ使用する必要がありますか?


1
私の知る限り、この2つは一般的に同じものに使用されるため、コンテキストはありますか?ただし、ケースはコンテキスト固有である可能性があります。
アランS.ハンセン

私は特定の文脈を持っていません、一般的な質問です。どのような場合、私は他の方法の代わりに一方の方法を使用する必要があります。これら2つの用途は異なるはずです。
Konst 2016

個人的に-私は主に、変数またはメソッド呼び出しのコンテキストでそれらについて話すときにパラメータという単語を使用し、URLコンテキストでそれらについて話すときに文字列をクエリします。(例:クエリ文字列はメソッドのパラメーターに分割されます)。しかし、それは単なる言語なので、文脈や状況は異なり、あなたがそれを「感じた」ときにどちらかを使用するために誰かがあなたを追い詰めるだろうとは思わない:)。
アランS.ハンセン

回答:


85

クエリコンポーネントは、最初によって示される?URIです。「クエリ文字列」は同義語である可能性があります(この用語はURI標準では使用されていません)。

クエリコンポーネントを使用したHTTPURIの例:

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コンポーネント、つまりパス²やフラグメントにも現れる可能性があります。URI標準に関する限り、どのコンポーネントとどの形式を使用するかはあなた次第です。

パス、クエリ、フラグメントにパラメータを含むURIの例:

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹URI標準はクエリコンポーネントについて述べています

[…]クエリコンポーネントは、「key = value」ペアの形式で識別情報を運ぶためによく使用されます[…]

²URI標準はパスコンポーネントについて述べています

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


1
パラメータとクエリが異なります。tools.ietf.org/html/rfc2396.htmlの
cowlinator

@cowlinator:(RFC 2396は廃止されましたが、現在の標準であるRFC 3986は、パスコンポーネントのパラメーターについて同様のことを述べています)。私はそれらが同じであるとは言いませんでしたか、それとも私でしたか?URIの作成者、クエリコンポーネントでパラメーターを指定でき(私の回答で説明されているように)、パスコンポーネントでパラメーターを指定することもできます(リファレンスで説明されているように)。どちらの場合も、これは単なる慣例であり、標準で定義されているものではありません。-私の答えに変更を提案していただけますか?OPはパス内のパラメータを意味すると思いますか?
unor

30

パラメータは、URLパス内に表示できるキーと値のペアであり、セミコロン文字(;)で始まります。

クエリ文字列はパス(存在する場合)の後に表示され、疑問符文字(?)で始まります。

パラメータとクエリ文字列の両方に、キーと値のペアが含まれています。

GET要求、パラメータがURL自体に表示されます:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

POST要求、パラメータ(コンテンツとして知られているように)URL自体ではなく、データストリーム内に現れることができます。

クエリ文字列は常にURLの一部です。

form-dataPOSTメソッドを使用する場合、パラメーターをデータストリームに埋め込むことができるため、URLにパラメーターが表示されない場合があります。はい、POSTリクエストはパラメータをフォームデータおよびURLで定義できますが、パラメータには複数の値が含まれる可能性があるため、これは矛盾しません。

これまでのところ、この動作の説明は見つかりませんでした。POSTリクエストからパラメータを「再表示」したり、GETリクエストを処理するコードに、を処理するコードと一部を共有させたりすると便利な場合があると思いますPOST。もちろん、これはURLのパラメーターをサポートするサーバーコードでのみ機能します。

より良い洞察が得られるまでform-dataPOSTリクエストのデータストリームでのみパラメータを使用することをお勧めします。

出典:

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

RFC 3986

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.