クエリ文字列とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > クエリ文字列の意味・解説 

クエリ文字列

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/06/21 16:20 UTC 版)

クエリ文字列(クエリもじれつ、: query string)、URLパラメータは、Webサーバに情報を送信するためにURLの末尾につける文字列である[1]。一般に、HTMLの一部として、ページの外観を選択したり、特定のコンテンツの位置にジャンプしたりするために、Webブラウザや他のアプリケーションソフトウェアによってURLに追加されるものを含む。

Google Chromeアドレスバーに表示されるURLのクエリ文字列 "?title=Query_string&action=edit"

WebサーバはHTTPリクエストを、URLパスに基づいてファイルシステムからファイルを読み込むか、リソースの種類に応じた方法で処理を行う。特別な処理が呼び出された場合、クエリ文字列はURLのパスコンポーネントとともに、その特別な処理を使用できるようになる。

構造

クエリ文字列を含む一般的なURLは次の通りである。

https://example.com/over/there?name=ferret

Webサーバはこのようなページへのリクエストを受け取ると、プログラムを実行する。このとき、クエリ文字列(この場合name=ferret)はプログラムの実行に影響を及ぼさない。疑問符 "?" は区切り文字であり、クエリ文字列の一部ではない[2][3]

Webフレームワークは、クエリ文字列内の複数のパラメータを何らかの区切り文字で区切って解析する方法を有していることがある[4]。次の例では、複数のパラメータをアンパサンド "&"で区切っている。

https://example.com/path/to/page?name=ferret&color=purple

クエリ文字列の構造は標準化されておらず、解析方法はWebサイトによって異なることがある。

HTMLでは、ユーザーエージェントがクエリ文字列を生成する3つの方法を定義している。

  • <form>...</form>要素を使ったHTMLフォーム
  • <img>要素のismap属性を使用した、<img ismap>構文でのサーバーサイド・イメージマップ英語版
  • HTML5で廃止された<isindex>要素を用いた検索フォーム。

Webフォーム

本来の用途のひとつは、HTMLフォームの内容を格納することである。例えば、フィールドfield1, field2, field3を含むフォームが送信されると、フィールドの内容は以下のようにクエリ文字列としてエンコードされる。

field1=value1&field2=value2&field3=value3...

  • クエリ文字列は、一連のフィールドと値のペアで構成される。
  • 各ペア内では、フィールド名と値は等号 "=" で区切られる。
  • 一連のペアはアンパサンド "&" で区切られる(セミコロン ";" は、W3Cでは推奨されていない[4])。

明確な基準はないが、ほとんどのWebフレームワークでは、1つのフィールドに複数の値を関連づけることができる(例えば、field1=value1&field1=value2&field2=value3[5][6]

フォームの各フィールドに対して、クエリ文字列はfield=valueのペアを含む。Webフォームには、ユーザーには表示されないフィールドが含まれることがある。これらのフィールドは、フォームが送信されるときにクエリ文字列に含まれる。

この規則はW3Cが推奨しているものである[4]。1999年、W3CはすべてのWebサーバがアンパサンド区切りに加えてセミコロン区切りをサポートし、アンパサンドを用いることなく、HTMLドキュメント内のURLでapplication/x-www-form-urlencodedクエリ文字列を使用できるようにすることを推奨した。2014年以降、W3Cは区切り文字としてアンパサンドのみを使用することを推奨している[7]

フォーム送信方法がGETの場合、フォームの内容はURLのクエリ文字列にのみエンコードされる。送信方法がPOST英語版の場合、同じエンコーディングが既定として使用されるが、その結果は修正されたURLに含まれるのではなく、HTTPリクエストの本体として送信される[8]

インデックス検索

HTMLにフォームが追加される以前は、ブラウザは<isindex>要素を一行のテキスト入力コントロールとして表示していた。このコントロールに入力されたテキストは、ベースのURLまたはaction属性で指定された他のURLへのGETリクエストの追加クエリ文字列としてサーバに送信された[9]。これは、Webサーバが与えられたテキストをクエリの条件として用い、一致するページのリストを返すことができるようにするためのものである[10]

インデックス検索コントロールに入力されたテキストが送信されると、次のようにクエリ文字列としてエンコードされる。

argument1+argument2+argument3...

  • クエリ文字列は、テキストをスペースで区切って単語に変換した一連の引数から構成される。
  • 一連の引数はプラス記号 "+" で区切る。

URLエンコード

URLに用いることができない文字空白文字など)や、URLの中で特殊な意味を持つ文字もある。たとえば、番号記号 "#" を使えば、文書のサブセクション(またはフラグメント英語版)を指定することができる。HTMLフォームでは、等号 "=" が名前と値を区切るのに使われる。URIの汎用的な構文はURLエンコーディングでこれらの文字を回避するが、HTMLフォームはそのような文字すべてにパーセントエンコーディングを適用するのではなく、いくつか追加の置換を行う[11]

HTML 5では、HTMLフォームをGETメソッドでWebサーバに送信する際の変換を次のように規定している。

チルダ "~" に対応するオクテットは、RFC 3986ではクエリ文字列で認められているが、HTMLフォームでは "%7E" にパーセントエンコードする必要がある。

トラッキング

クエリ文字列を受け取ったプログラムは、その一部または全部を無視することができる。指定されたURLがプログラムではなくファイルに対応する場合、クエリ文字列はすべて無視される。しかし、クエリ文字列が使われているか否かに関係なく、クエリ文字列を含むURL全体がサーバのログファイル英語版に保存される。

このことから、HTTP cookieと同様の方法でユーザーを追跡するためにクエリ文字列を使用することができる。これが機能するためには、ユーザーがページをダウンロードするたびに固有の識別子が決められ、そのページが含むすべてのリンクのURLにクエリ文字列として追加されなければならない。ユーザーがこれらのリンクのひとつをたどるとすぐに、対応するURLがサーバにリクエストされる。こうすることで、このページのダウンロードが前のページとリンクされる。

例えば、次のような内容のWebページがリクエストされた場合を考える。

 <a href="foo.html">see my page!</a>
 <a href="bar.html">mine is better</a>

固有の文字列としてe0a72cb2a2c7が選ばれたとすると、Webページは次のように変更される。

 <a href="foo.html?e0a72cb2a2c7">see my page!</a>
 <a href="bar.html?e0a72cb2a2c7">mine is better</a>

クエリ文字列を追加しても、ページの見た目は変わらない。例えばユーザーが最初のリンクをたどると、ブラウザはサーバにfoo.html?e0a72cb2a2c7というページをリクエストし、サーバは?以降を無視してfoo.htmlというページを送り、そのリンクにも同じクエリ文字列を追加する。

こうすることで、このユーザーからのその後のページリクエストはすべて同じクエリ文字列foo.html?e0a72cb2a2c7が追加されることになるため、これらのページがすべて同じユーザーによって閲覧されたということを特定することができる。クエリ文字列は、Webビーコンと連携して使用されることが多い。

トラッキングに用いられるクエリ文字列とHTTP cookieの主な違いは次の通りである。

  • クエリ文字列はURLの一部を形成するため、ユーザーがURLを保存したり、他のユーザーに送信したりする場合でも保持される。HTTP cookieは閲覧セッションを跨いで保持することができるが、URLとともに保存または送信されることはない。
  • ユーザーが2つ(またはそれ以上)の独立した経路で同じWebサーバに到着した場合、保存されるHTTP cookieは同じものになるが、クエリ文字列は異なるものが割り当てられる。
  • ユーザーは設定でHTTP cookieを無効にすることができ、その場合にはトラッキングにHTTP cookieを使用することはできない。一方、クエリ文字列は無効にできないため、トラッキングにクエリ文字列を使用すれば、どのような状況でも機能する。
  • ページへのアクセスによって渡されるクエリ文字列が異なると、ブラウザ(プロキシがある場合はプロキシ)のキャッシュからページが提供されることがないため、Webサーバの負荷が増加し、ユーザーエクスペリエンスが低下する。

互換性の問題

HTTPの仕様によれば、

実際には、リクエスト行の長さに関する様々なその場限りの制限がみられる。すべてのHTTP送受信者は、最低限8000オクテットのリクエスト行長をサポートすることが推奨される[13]

とされている。

URLが長すぎる場合、ウェブサーバーはHTTPステータスコード 414 URI Too Longで失敗する。

これらの問題への一般的な対応策は、GETの代わりにPOSTを使い、パラメータをリクエストボディに格納することである。リクエストボディの長さの制限は、一般的にURLの長さの制限よりもはるかに緩い。たとえば、POSTサイズの制限は、デフォルトでIIS 4.0では2 MB、IIS 5.0では128 KBである。Apache2ではLimitRequestBodyディレクティブを使って制限を設定できる。LimitRequestBodyディレクティブはリクエストボディに許容されるバイト数を0(無制限)から2147483647 (2 GB) までで指定できる[14]

脚注

出典

  1. ^ クエリ文字列(URLパラメーター)とは?Webサービス上の用途とその役割”. くりたま. デジタルハリウッド (2022年1月7日). 2025年6月21日閲覧。
  2. ^ Berners-Lee, T.; Fielding, R.; Masinter, L. (January 2005). "RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax". Request for Comments (英語). Internet Engineering Task Force. "Syntax Components" (section 3). 2025年2月23日閲覧
  3. ^ Berners-Lee, T.; Fielding, R.; Masinter, L. (January 2005). "RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax". Request for Comments (英語). Internet Engineering Task Force. "Query" (section 3.4). 2025年2月23日閲覧
  4. ^ a b c "Forms in HTML documents" (英語). W3C. 2013年9月8日閲覧
  5. ^ "ServletRequest (Java EE 6)". Oracle (英語). 10 February 2011. 2013年9月8日閲覧
  6. ^ "uri – Authoritative position of duplicate HTTP GET query keys". Stack Overflow (英語). 9 June 2013. 2013年9月8日閲覧
  7. ^ "4.10 Forms — HTML5" (英語). W3C. 2013年9月8日閲覧
  8. ^ "4.10.21.3 Form submission algorithm — HTML5.2" (英語). W3C. 2017年12月14日閲覧
  9. ^ "<isindex>". HTML (HyperText Markup Language) (英語). 2017年10月19日時点のオリジナルよりアーカイブ。2015年11月21日閲覧
  10. ^ "HTML/Elements/isindex". W3C Wiki (英語). 2021年6月22日時点のオリジナルよりアーカイブ。2020年3月20日閲覧
  11. ^ a b "HTML URL Encoding Reference" (英語). W3Schools. 2013年5月1日閲覧
  12. ^ "The application/x-www-form-urlencoded encoding algorithm — HTML5.2" (英語). W3C. 2017年12月14日閲覧
  13. ^ "HTTP/1.1 Message Syntax and Routing". ietf.org (英語). 2014年7月31日閲覧
  14. ^ "core – Apache HTTP Server". Httpd.apache.org (英語). 2013年9月8日閲覧

関連項目

外部リンク




英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  
  •  クエリ文字列のページへのリンク

辞書ショートカット

すべての辞書の索引

「クエリ文字列」の関連用語

クエリ文字列のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



クエリ文字列のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのクエリ文字列 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS