[9]
URI の仕様書で使われている規則 query
は、 URI の照会部分
(最初の ?
より後で、 #
より前の部分)
を表します。
[11]
照会 (query
)
は非階層的方法で資源を識別するものとされています
RFC 3986 3.4. が、それ以上の構文や意味は各
URI scheme に任されています。
(そして scheme によっては更に下位の名前空間管理者に任されています。)
しかし、実際の使われ方はおおむねいくつかのパターンに当てはまります。
[12] param
方式:
名前と値の組を複数個列挙します。最もよく使われるのは名前と値の間に
=
を挟み、名前・値の組同士の間に &
を挟んで name1=value1&name2=value2
のようにします。
=
)&
と ;
が多く、 ,
, $
, |
(構文違反),
!
などが使われることもあります。)+
の意味などにより、幾つかのバリエーションがあります。
主な使用例:
[17] 次の場面では application/x-www-form-urlencoded
が使われています。
[64] 次の場面では application/x-www-form-urlencoded
の +
構文を使わないパーセント符号化が使われています。
[13] isindex
方式:
複数の値を与える時に +
で区切ります。
単純な一次元配列です。
主な使用例:
[60] ismap
のハイパーリンク接尾辞形式
[14]
Specifying time intervals in URI queries and fragments of time-based Web resources (2006-05-06 10:39:46 +09:00
版) http://annodex.net/TR/URI_fragments.html#rfc.section.3
[15] coffee:
URL scheme では ,
区切りのリストとなっています。
[22] z39.50r:
/ z39.50s:
では、
値の後に ;
区切りで名前、=
、値の組をいくつか指定できます。
[;/?:@&=+,$]
です。 ?
は問い合わせのそれ以前との分離のための予約。 [&$;=]
は HTTP などで問合せを引数的に解釈するのによく使われるもの。残る [/:@,]
はどうでしょうね? これらも CGIスクリプトなんかが意味を持たせて使っていたりするのかな。+
が抜けてました。これはよく間隔の意味で使いますね。で、これを含めた10文字が、丁度 2396 の reserved
でした。つまり、予約文字全部が予約ですと、ただそれだけの意味でした。/
はへたれ実装対策で escape encode した方が安全というのもあるでしょう。[8] (>>3-5 の話は間違っていませんし RFC 3986 でも変わっていませんが、
query
固有の話としては出てこなくなりました。
このあたりの話については予約文字や百分率符号化の項を参照して下さい。)
[194] hypertext references and the query component (Erik van der Poel 著, 版) http://lists.w3.org/Archives/Public/public-iri/2009Jul/0008.html
[18] HTTP 上で動作するプロトコルである IPP の ipp:
URL は、http:
の URL scheme を変えたものとして規定されており、
query について特別な規定はありませんでした。後に IPP over HTTPS
のために規定された ipps:
は https:
の URL scheme を変えたものにあたりますが、 query は一貫性のために認めるものの、
鯖の実装依存であることからクライアントは指定するべきではない
>>19 とされています。
[62] フォームの提出では、 URL記録のクエリー全体を置き換える操作が行われることがあります。
[79] Webアプリケーションから読み込む JavaScript や CSS のキャッシュの制御のために使われることがあります。
[34] Webアプリケーションは、 クライアント側で動作する JavaScript の処理により、 URL query が指定されていればその値を解釈し、 その結果に基づき動作を変化させることがあります。
[24] 本来 query の利用方法は著者の管理下にあるものですが (もちろん任意の利用者がどのような query を使って要求を送信するかまでは制御できませんが、 本来なら想定外の query を含む場合は何も考えずに拒絶できるはずです)、 実際には第三者が query を勝手に利用することがあります。
[30] 著者 (やサーバー・Webサービスの開発者) は、実用上、 query を次のように扱うべきです。
[26] リンクする時に、リンク元の Webサイトがどこであるか示すことを目的にリンク先の URL に何らかの query の値を付与するものがあります。
[23] アンテナは、リンク先の URL に URL query として更新(検知)日付などの値
(朝日奈クエリ)
を付け足すことがありました。
これと Webブラウザーが既読リンク (:visited
) と未読リンク
(:link
) で色を変えるなどして表示することにより、
更新後に当該 URL を表示したかどうかを Webブラウザーに管理させることができます。
[25] 本来サーバーの管理下にある query を第三者であるアンテナが勝手に使うため、 サーバーの処理に悪影響を及ぼすおそれがあります。そうでなくてもサーバーのアクセスログに著者の意図せぬ query の記録が残るため、不審に思われる可能性があります。 そのため素片識別子を使うのがより良い方法と考えられていました。 ただし IE は素片識別子を除いた部分で既読管理していたため、 IE で意図通り動作させるためには query を使うのもやむを得ないと考えられていました。
[29] 例えば http://www.example.com/
が 2000年1月2日に更新されていた場合、
http://www.example.com/?20000102
のような URL が示されるかもしれません。
[105] 素片識別子方式に対する利点として、 query にすることでキャッシュを回避できる (ので最新版を見られる) というのもあったらしい。
[104] ねこめしにっき(2004年6月), , http://www.remus.dti.ne.jp/~a-satomi/nikki/2004/06.html
Location
インターフェイス search
属性[57] この属性は、 Unforgeable
です >>36。
[37] location.search
の取得器は、次のようにしなければなりません
>>36。
[45] location.search
の設定器は、次のようにしなければなりません
>>36。
QUERY_STRING
(CGI)[200] CGI のメタ変数 QUERY_STRING
には要求された URL
の query 部分が含まれます。
QUERY_STRING = query-string query-string = *uric uric = reserved | unreserved | escaped
[204] 鯖はこの値を必ず設定しなければなりません。 URL に query が含まれていなければ空文字列としなければなりません。 >>202
[205] >>204 の規定は CGI において一般に空文字列と値の未設定を区別しないこととどう関係するのか不明瞭です。 このメタ変数に限って特別扱いしているとも読めますし、 query が空文字列であっても存在しなくても一貫してメタ変数を設定しないなら良いと解釈できないこともありません。
[196] CGI の実装では Apache などは URI が /foo の場合も /foo? の場合もメタ変数 QUERY_STRING
は空文字列になりますが、サーバーによっては前者は変数未定義になることもあるようです。
[197] >>196 [NCSA] 的には妥当だけど、 [COAR] 的には不当ですね。
[199] >>196 IIS と iPlanet は QUERY_STRING
をその場合設定しないそうです。
[195] [NCSA]:
[3] [COAR 03]:
[198] PHP では (古い書き方では) QUERY_STRING
の部分を構文解析して変数名 = 引数名で値に access できますね。 ?foo=bar を $foo とか。
[10] 定義の変遷:
query := *( uchar / reserved ) ;; RFC 1808
query := *uric ;; RFC 2396
query := *( pchar / "/" / "?" ) ;; RFC 3986
[7] RFC 3986 の定義の詳細:
RFC 3986 の pchar
は
unreserved / pct-encoded / sub-delims / ":" / "@"
です。すなわち URI で使える文字のうち、
"#" / "[" / "]"
だけが使えません。
定義としては RFC 2396 と同じです。
[207] Form of the GET method used with searches ( ( 版)) http://www.w3.org/Protocols/HTTP/Methods/GetSearches.html
[208] Web Application Description Language ( ( 版)) http://www.w3.org/Submission/2009/SUBM-wadl-20090831/#x3-130002.6.1
[210] IRC logs: freenode / #whatwg / 20131217 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20131217
[211] Bug 23822 – Should the EventSource, Worker, and SharedWorker constructors resolve the URL using utf-8? ( ( 版)) https://www.w3.org/Bugs/Public/show_bug.cgi?id=23822
[212] Clean up set the input algorithm now all URLs have a query · 217cf06 · whatwg/url ( ( 版)) https://github.com/whatwg/url/commit/217cf06b9d2b7fbbbf65eec9d1ea9fce66fec8bf
[20] Do not encode ` in query. Fixes #17. · whatwg/url@f54c44d ( 版) https://github.com/whatwg/url/commit/f54c44d1f790dd2b8913e955ba6d334c6f14a048
[21] Bug 26338 – Limit query encoding override to http/https ( 版) https://www.w3.org/Bugs/Public/show_bug.cgi?id=26338
[52] Comment out query/queryAll/Elements for now · whatwg/dom@10b6cf1 ( 版) https://github.com/whatwg/dom/commit/10b6cf1ba02806220d5461a3bdb7939728b73635
[59] Merge effective script origin into origin · whatwg/html@8a843f2 ( 版) https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275
[61] Remove isindex handling from application/x-www-form-urlencoded · whatwg/url@c85fb5d ( 版) https://github.com/whatwg/url/commit/c85fb5d527f822e089aecc9207f077c6b886aed5
[66] Align with changes in Selectors ( (annevk著, )) https://github.com/whatwg/dom/commit/1594aa52357371354780750413ad88e9e8a2b56b
[67] 284474 – Converting to UTF-8 a url with an unescaped non-ASCII chars in the query part leads to an incompatibility with most server-side programs ( ()) https://bugzilla.mozilla.org/show_bug.cgi?id=284474
[68] URL 生成ツール - アナリティクス ヘルプ () https://support.google.com/analytics/answer/1033867?hl=ja
[71] Editorial: give URL syntax components their own terms (annevk著, ) https://github.com/whatwg/url/commit/451696e4297c4c676fae21dbc926aeafb2477e6c
[77] java - Tomcat 8 is not able to handle get request with '|' in query parameters? - Stack Overflow ( ()) http://stackoverflow.com/questions/41053653/tomcat-8-is-not-able-to-handle-get-request-with-in-query-parameters
[78] RFC 8141 - Uniform Resource Names (URNs) () https://tools.ietf.org/html/rfc8141#section-2.3
[81] Use the API URL character encoding for XMLHttpRequest (annevk著, ) https://github.com/whatwg/xhr/commit/6f14c60f5ae81381c12ff50f5f6898a1583b570d
[82] Use document encoding for URL parser · Issue #159 · whatwg/xhr () https://github.com/whatwg/xhr/issues/159
[83] Use document encoding for URL parser · Issue #159 · whatwg/xhr () https://github.com/whatwg/xhr/issues/159
[84] Use the API URL character encoding for XMLHttpRequest by annevk · Pull Request #172 · whatwg/xhr () https://github.com/whatwg/xhr/pull/172
[85] Meta: remove query/queryAll comments (annevk著, ) https://github.com/whatwg/dom/commit/510fa87968f0db76d7e86e0abb3f32e9ed2ac811
[86] Do not throw for query() and queryAll() · Issue #39 · whatwg/dom () https://github.com/whatwg/dom/issues/39
[88] 62273 – Add support for alternate URL specification () https://bz.apache.org/bugzilla/show_bug.cgi?id=62273
[89] Change query state slightly to better deal with non-UTF-8 encodings (annevk著, ) https://github.com/whatwg/url/commit/f0e4390bf882446445e944215524ff3877aac95a
[90] "html" error mode somewhat incompatible with URLs · Issue #139 · whatwg/encoding () https://github.com/whatwg/encoding/issues/139
[91] Change query state slightly to better deal with non-UTF-8 encodings by annevk · Pull Request #386 · whatwg/url () https://github.com/whatwg/url/pull/386
[92] 795733 - '&' and ';' should not be percent-encoded in URL queries - chromium - Monorail () https://bugs.chromium.org/p/chromium/issues/detail?id=795733
[93] Editorial: avoid setting encoding multiple times (annevk著, ) https://github.com/whatwg/url/commit/b385374e5d1b48f82b8040395786469ae655f435
[94] Change query state slightly to better deal with non-UTF-8 encodings by annevk · Pull Request #386 · whatwg/url () https://github.com/whatwg/url/pull/386
[95] Percent-encode ' in queries of URLs with special schemes (achristensen07著, ) https://github.com/whatwg/url/commit/6ef17ebe1220a7e7c0cfff0785017502ee18808b
[96] percent-encode ' in queries of URLs with special schemes · Issue #348 · whatwg/url () https://github.com/whatwg/url/issues/348
[97] percent-encode ' in queries of URLs with special schemes by achristensen07 · Pull Request #395 · whatwg/url () https://github.com/whatwg/url/pull/395
[98] Change query state slightly to better deal with non-UTF-8 encodings (annevk著, ) https://github.com/whatwg/url/commit/f0e4390bf882446445e944215524ff3877aac95a
[99] "html" error mode somewhat incompatible with URLs · Issue #139 · whatwg/encoding () https://github.com/whatwg/encoding/issues/139
[100] Change query state slightly to better deal with non-UTF-8 encodings by annevk · Pull Request #386 · whatwg/url () https://github.com/whatwg/url/pull/386
[101] Editorial: avoid setting encoding multiple times (annevk著, ) https://github.com/whatwg/url/commit/b385374e5d1b48f82b8040395786469ae655f435
[102] mod_proxy_balancer - Apache HTTP Server Version 2.4 (, ) https://httpd.apache.org/docs/current/en/mod/mod_proxy_balancer.html#stickyness_implementation
[103] Command-Line Interface — Streamlink 1.6.0 documentation (, ) https://streamlink.github.io/cli.html#cmdoption-http-query-param