1. ホーム
  2. http

[解決済み] HTTP GET クエリの重複キーの権威位置

2022-04-28 13:07:37

質問

HTTP GETのクエリ文字列が重複するフィールドを持つ動作について、以下のような権威ある情報を見つけるのに苦労しています。

http://example.com/page?field=foo&field=bar 

で、特にその順番が守られているかどうか。ほとんどのウェブ指向言語では、キー "field" に関連付けられた foo と bar の両方を含む配列を生成しますが、この点に関する権威ある声明(RFC など)が存在するかどうかを知りたいのです。 RFC 3986 には、以下のセクションがあります。 3.4. Query は、key=valueのペアに言及していますが、順序や重複するフィールドなどをどのように解釈するかについては、何も書かれていません。これは、バックエンドに依存し、そのRFCの範囲外であるため、意味があるのですが...。

デファクトスタンダードが存在するとはいえ、興味本位で権威あるソースが欲しいところです。

どのように解決するのですか?

この質問がなされ、12年前に受け入れられた回答が書かれたときとは状況が変わっているようです。私は、今、私たちは権威あるソースを手に入れたと信じています。WHATWG URL Standard では、クエリ文字列の抽出と解析のプロセスをセクション 6.2 で詳しく説明しています ( https://url.spec.whatwg.org/#interface-urlsearchparams ) と x-www-form-urlencoded のパースに関するセクション 5.1 ( https://url.spec.whatwg.org/#urlencoded-parsing ). パース出力は "名前-値タプルの最初は空のリストで、名前と値の両方が文字列を保持します" ここでリストは、有限の 順序付き のシーケンスであり、キーと値のペアはURLの中に現れる順番にこのリストに追加される。最初は繰り返されるキーについて言及されていませんが、セクション 6.2 の URLSearchParams クラスのいくつかのメソッド ( https://url.spec.whatwg.org/#interface-urlsearchparams ) は、順番について明確な期待値を設定しています: "The getAll(name) メソッドの手順は、名前がnameであるすべての名前-値ペアの値を返すことである...。 リスト順 "です。 sort() メソッドは、" を指定します。 同じ名前を持つ名前-値ペア間の相対的な順序は保持されなければならない。 "(強調)。sortメソッドが追加されたコミットで参照されているGithub issueを調べると、当初の提案ではキーが同一である値でソートすることになっていましたが、次のように変更されています。 "デフォルトソートが値の順序に影響しない理由は 値の順序は重要である . 値の順番を動かしても大丈夫と考えるべきではありません。" ( https://github.com/whatwg/url/issues/26#issuecomment-271600764 )