web-dev-qa-db-ja.com

GETリクエストで同じパラメータ名に複数の値を渡す正しい方法

GETリクエストで同じパラメータ名に複数の値を渡す正しい方法は何かを調べています。

私はこのようなURLを見ました:

http://server/action?id=a&id=b

そして私はこのようなURLを見ました:

http://server/action?id=a,b

私の理解は、最初のものが正しいということですが、私はこれについての参照を見つけることができません。私はhttpの仕様を見ましたが、URLの 'query'部分がどのように構成されるべきかについては何も見ることができませんでした。

私は「どちらでもいい」という答えが欲しくありません - 私がWebサービスを構築しているなら、私がこれらのメソッドのどれが標準であるか知りたいので私のWebサービスを使う人々は同じ名前に複数のパラメータを渡す方法を知っています。

それで、誰かが私に公式の参照先を教えてどのオプションが正しいかを確認することができますか?

151
stripybadger

確かに、定義された標準はありません。その情報をサポートするために、ウィキペディアの Query String の章を見てください。次のようなコメントがあります。

明確な標準はありませんが、ほとんどのWebフレームワークでは複数の値を単一のフィールドに関連付けることができます。 [3][4]

さらに、セクション .4 Query の中の RFC 3986 を見ると、複数の値を持つパラメーターの定義はありません。

ほとんどのアプリケーションは、最初に示したオプションhttp://server/action?id=a&id=bを使用します。その情報をサポートするために、複数の値を持つパラメータに同じ標準を使用するASP.NETアプリケーションに関して、これ Stackoverflowリンク 、およびこれ MSDNリンク をご覧ください。

ただし、APIを開発しているので、APIの呼び出し元がクエリ文字列を作成するのにそれほど問題がないので、最も簡単な方法を実行することをお勧めします。

129

私はブラウザがデフォルトでフォームをどのように扱うかを検討することをお勧めします。たとえば、フォーム要素<select multiple>と、この例のw3schoolsでの複数の値の処理方法を見てください。

<form action="/action_page.php">
<select name="cars" multiple>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>
<input type="submit">
</form>

PHPには:

<select name="cars[]" multiple>

w3schools.comの上のライブサンプル

上から "saab、opel"をクリックして送信をクリックすると、cars = saab&cars = opelの結果が生成されます。バックエンドサーバーによっては、パラメーターcarsが配列として表示され、さらに処理を進めることができます。

この問題を処理するためのより「標準的な」方法を探している人に役立つことを願っています。

1
phanf