むンタヌネット技術タスクフォヌス (IETF) J. Reschke
Request for Comments: 10008 greenbytes
分類: 暙準化過皋 J. Snell
ISSN: 2070-1721 Cloudflare
M. Bishop
Akamai
2026幎6月

HTTP QUERY メ゜ッド


抂芁

本仕様は、HTTP の QUERY メ゜ッドを定矩する。QUERY は、リク゚スト 察象に察し、同封されたコンテンツを安党か぀冪等な方法で凊理し、その埌、 凊理結果を応答ずしお返すこずを芁求する。これは POST リク゚ストに䌌おいるが、QUERY リク゚ストは、 郚分的な状態倉曎を懞念するこずなく、自動的に繰り返したり再開したりできる。

本メモの䜍眮付け

本文曞は、むンタヌネットの暙準化過皋の文曞である。

本文曞は、むンタヌネット技術タスクフォヌス (IETF) の成果物である。本文曞は、 IETF コミュニティヌの合意を衚しおいる。公開レビュヌを受け、 むンタヌネット技術運営グルヌプ (IESG) によっお公開が承認された。 むンタヌネット暙準に぀いおの詳现は、RFC 7841 の第2節を参照。

本文曞の珟圚の状態、正誀情報、および本文曞に察する フィヌドバックの提䟛方法に぀いおは、https://www.rfc-editor.org/info/rfc10008を参照。

Copyright Notice

Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.


1. ã¯ã˜ã‚ã«

本仕様は、安党か぀冪等なリク゚ストを行う手段ずしお HTTP QUERY リク゚ストメ゜ッドを 定矩する第9.2節、[HTTP]を参照。このリク゚ストには、 察象リ゜ヌスがリク゚ストをどのように凊理するかを蚘述する衚珟が同封される。

䞀般的なク゚リのパタヌンは次のずおりである:

GET /feed?q=foo&limit=10&sort=-published HTTP/1.1
Host: example.org

しかし、䌝達するデヌタが倧量で、リク゚ストの URI に笊号化できない堎合、この パタヌンには問題が生じる:

  • リク゚ストは、盞互に調敎されおいない倚数のシステムを通過し埗るため、 サむズ制限は事前にはわからないこずが倚いただし、第4.1節、[HTTP]では、送信者ず 受信者に察し、少なくずも 8000 オクテットをサポヌトするこずを掚奚しおいる点に泚意。
  • ある皮のデヌタを察象 URI で衚珟するこずは、そのデヌタを有効な URI に笊号化する オヌバヌヘッドのため、非効率である。
  • リク゚スト URI は、リク゚ストコンテンツよりもログに蚘録されやすく、 ブックマヌクに珟れるこずもある。
  • ク゚リをリク゚スト URI に盎接笊号化するず、ク゚リ入力のあらゆる組み合わせを 事実䞊、別個のリ゜ヌスずしお扱うこずになる。

GET の䜿甚に代わる方法ずしお、倚くの実装は HTTP POST メ゜ッドを䜿甚しお、 以䞋の䟋に瀺すようにク゚リを実行する。この堎合、ク゚リ 操䜜ぞの入力は、リク゚スト URI のク゚リ成分を䜿甚する代わりに、 リク゚ストコンテンツずしお枡される。

ク゚リを芁求するための HTTP POST の兞型的な䜿甚䟋は、次のずおりである:

POST /feed HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded

q=foo&limit=10&sort=-published

しかし、この方法では、リク゚ストの送信先である リ゜ヌスずサヌバヌに぀いおの具䜓的な知識がなければ、安党か぀冪等なク゚リが 実行されおいるこずは、容易には明らかにならない。

QUERY メ゜ッドは、GET ず POST の䜿甚の間にある隔たりを埋める解決策を提䟛する。 䞊蚘の䟋は、次のように衚珟される:

QUERY /feed HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded

q=foo&limit=10&sort=-published

POST ず同様に、ク゚リ操䜜ぞの入力は、リク゚スト URI の䞀郚ではなく、 リク゚ストのコンテンツずしお枡される。しかし、POST ずは異なり、このメ゜ッドは明瀺的に安党か぀ 冪等であり、キャッシュ凊理や自動再詊行などの機胜を動䜜させるこずができる。

重芁なリ゜ヌスはすべお URI によっお識別されるべきであるずいう蚭蚈原則を螏たえ、 本仕様は、サヌバヌがク゚リ自䜓にも、 特定のク゚リ結果にも URI を割り圓お、埌で GET リク゚ストに䜿甚できるようにする方法を蚘述する。

芁玄するず、次のずおりである:

衚1: 関連するメ゜ッドの性質の芁玄
GET QUERY POST
安党 はい はい そうでない可胜性がある
冪等 はい はい そうでない可胜性がある
ク゚リ自䜓の URI あり定矩による 任意Location 応答フィヌルド なし
ク゚リ結果の URI 任意Content-Location 応答 フィヌルド 任意Content-Location 応答 フィヌルド 任意Content-Location 応答 フィヌルド
キャッシュ可胜 はい はい はい。ただし、将来の GET たたは HEAD リク゚ストに察しおのみ
コンテンツボディ 「定矩された意味論なし」 想定される意味論は察象 リ゜ヌスに䟝存 想定される意味論は察象 リ゜ヌスに䟝存

1.1. ç”šèªž

本文曞は、次に定矩される甚語を䜿甚する: 第3節、[HTTP]。

さらに、URI のク゚リ成分に含たれるパラメヌタヌを指す甚語ずしお、URI ク゚リパラメヌタヌを 䜿甚する第4.2.2節、 [HTTP]。たた、ク゚リ コンテンツは、リク゚ストコンテンツ第6.4節、[HTTP]のうち、QUERY リク゚ストのものを指す。

1.2. è¡šèš˜èŠå‰‡

キヌワヌド "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", および "OPTIONAL" は、本文曞では、次に蚘述されるずおりに解釈される: BCP 14 [RFC2119] [RFC8174]。 ただし、ここに瀺すように、すべお倧文字で珟れる堎合に限る。


2. QUERY メ゜ッド

QUERY メ゜ッドは、サヌバヌ偎のク゚リを開始するために䜿甚される。GET メ゜ッドは、 察象 URI によっお識別されるリ゜ヌスの衚珟を芁求する第7.1節、[HTTP]で定矩されるのに察し、QUERY メ゜ッドは、 察象リ゜ヌスに察し、その察象リ゜ヌスの範囲内でク゚リ操䜜を実行するよう 芁求するために䜿甚される。

リク゚ストのコンテンツずそのメディアタむプが、ク゚リを定矩する。オリゞンサヌバヌは、 察象リ゜ヌスに基づいお操䜜の範囲を決定する。

サヌバヌは 必ず リク゚ストを倱敗させなければならない。Content-Type リク゚ストフィヌルド[HTTP]、第8.3節が 欠萜しおいるか、リク゚ストコンテンツず敎合しない堎合が、これに該圓する。

すべおの HTTP メ゜ッドず同様に、察象 URI のク゚リ郚分は、ク゚リ察象のリ゜ヌスの 識別に関䞎する。それがク゚リ結果に盎接圱響するかどうか、およびどのように圱響するかは、 リ゜ヌスに固有であり、本仕様の範囲倖である。

QUERY リク゚ストは、察象リ゜ヌスに関しお安党である[HTTP]、第9.2.1節。 すなわち、クラむアントは、察象リ゜ヌスの状態が倉曎されるこずを 芁求も期埅もしない。これは、サヌバヌが远加の HTTP リ゜ヌスを䜜成し、 それを通じお远加情報を取埗できるようにするこずを劚げない2.3節および2.4節を参照。

さらに、QUERY リク゚ストは冪等である[HTTP]、第9.2.2節。 たずえば接続障害の埌など、必芁に応じお再詊行したり繰り返したりできる。

第15.3節、 [HTTP]に埓い、2xx成功 応答コヌドは、リク゚ストが正垞に受信され、理解され、受け入れられたこずを瀺す。

特に、200 (OK) 応答は、ク゚リが正垞に凊理され、 その凊理結果が応答コンテンツずしお同封されおいるこずを瀺す。

2.1. ãƒ¡ãƒ‡ã‚£ã‚¢ã‚¿ã‚€ãƒ—ずコンテンツネゎシ゚ヌション

QUERY リク゚ストの意味論は、リク゚ストコンテンツず、それに関連付けられた メタデヌタメディアタむプなどの䞡方に䟝存する[HTTP]、第8.3.1節。 䞀般に、コンテンツずメタデヌタが敎合しないリク゚ストに問題がある堎合、必ず 4xxクラむアント゚ラヌ応答によっお拒吊しなければならない[HTTP]、第15.5節。

以䞋の䞀芧は、さたざたな倱敗の事䟋を蚘述し、具䜓的なステヌタスコヌドを掚奚する:

  • リク゚ストにメディアタむプ情報が欠けおいる堎合、定矩䞊、そのリク゚ストは䞍正であり、 400クラむアント゚ラヌなどの 4xx ステヌタスコヌドで倱敗させる必芁がある。
  • メディアタむプが指定されおいるが、リ゜ヌスでサポヌトされおいない堎合、415 (Unsupported Media Type) が適切である。これには特に、 メディアタむプ自䜓は既知であるものの、察象リ゜ヌスぞの QUERY に固有の 意味論が存圚しない堎合が含たれる。いずれの堎合も、Accept-Query 応答フィヌルド第3節を 䜿甚しお、サポヌトされるメディアタむプをクラむアントに通知できる。
  • メディアタむプが指定されおいるが、実際のリク゚ストコンテンツず敎合しない堎合、 400 (Bad Request) を返すこずができる。すなわち、サヌバヌはリク゚ストコンテンツからメディア タむプを掚枬し、欠萜した倀や「誀った」倀を䞊曞きするこずは蚱されない すなわち、「コンテンツスニッフィング」。
  • メディアタむプが指定され、理解されおおり、コンテンツも実際にそのタむプず敎合するが、 ク゚リの実際の内容が原因でク゚リを凊理できない堎合、 ステヌタス 422 (Unprocessable Content) を䜿甚できる。䟋ずしおは、 存圚しないテヌブルを指定する、構文䞊は正しい SQL ク゚リが挙げられる。
  • クラむアントが Accept フィヌルドを䜿甚しお特定の応答メディアタむプを芁求し[HTTP]、第 12.5.1節、それがリ゜ヌスでサポヌトされおいない堎合、ステヌタスコヌド 406 (Not Acceptable) が適切である。

2.2. ç­‰äŸ¡ãªãƒªã‚œãƒŒã‚¹

ある QUERY リク゚ストの等䟡なリ゜ヌスは、GET リク゚ストに応答し、 その QUERY リク゚ストずその察象を衚し、メッセヌゞの コンテンツずメタデヌタの䞡方を考慮するリ゜ヌスである第6節、[HTTP]。特に、これには、 衚珟メタデヌタ第8節、[HTTP]、たずえば コンテンツのメディアタむプが含たれる。

蚀い換えるず、等䟡なリ゜ヌスは、QUERY を実装するリ゜ヌスから、 リク゚ストコンテンツを組み蟌むこずによっお導出される。

等䟡なリ゜ヌスずいう甚語は、遞択された衚珟など、 HTTP の他の偎面の動䜜を定矩するための手段ずしお䜿甚される。サヌバヌは、 これらのリ゜ヌスに URI を割り圓おるこずができるが、その必芁はない第1.1節、[URI]を参照。割り圓おた 堎合、これらのリ゜ヌスには GET リク゚ストでアクセスできるようになる。

2.3. Content-Location 応答フィヌルド

成功応答2xx、第15.3節、 [HTTP]には、 操䜜の結果に察応するリ゜ヌスの識別子を含む Content-Location ヘッダヌフィヌルドを 含めるこずができる。詳现は、第8.7節、[HTTP]を参照。これは、 クラむアントが瀺された URI に察しお GET リク゚ストを送信するこずで、 盎前に実行されたク゚リ操䜜の結果を取埗できる、ずいうサヌバヌの䞻匵を衚す。 瀺されたリ゜ヌスは、䞀時的なものである可胜性がある。

付録 A.4.1を 䟋ずしお参照。

2.4. Location 応答フィヌルド

サヌバヌは、QUERY リク゚ストの等䟡なリ゜ヌス第2.2節に URI を割り圓おるこずができる。割り圓おた 堎合、そのリ゜ヌスの URI を、2xx 応答の Location ヘッダヌフィヌルドに 含めるこずができる第10.2.2節、 [HTTP]を参照。これは、 クラむアントが瀺された URI に GET リク゚ストを送信するこずで、ク゚リコンテンツを再送信せずに、 盎前に実行されたク゚リ操䜜を繰り返せる、ずいう䞻匵を衚す。このリ゜ヌスの URI は、 䞀時的なものである可胜性がある。将来のリク゚ストが倱敗した堎合、クラむアントは、元の QUERY リク゚スト察象ず、以前に送信したコンテンツを䜿甚しお再詊行できる。

付録 A.4.2を䟋ずしお参照。

2.5. ãƒªãƒ€ã‚€ãƒ¬ã‚¯ãƒˆ

堎合によっおは、サヌバヌは、ナヌザヌ゚ヌゞェントを別の URI にリダむレクトするこずで、 QUERY リク゚ストに間接的に応答するこずを遞択するこずがある第15.4節、 [HTTP]を参照。

ステヌタスコヌド 301 (Moved Permanently、[HTTP]、第 15.4.2節、たたは 308 (Permanent Redirect、[HTTP]、第 15.4.9節の応答は、察象リ゜ヌスが、Location 応答フィヌルドによっお参照される別の URI に恒久的に移動したこずを瀺す[HTTP]、第 10.2.2節。同様に、ステヌタスコヌド 302 (Found、[HTTP]、第 15.4.3節、たたは 307 (Temporary Redirect、[HTTP]、第 15.4.8節の応答は、察象リ゜ヌスが䞀時的に移動したこずを瀺す。これら4぀の 堎合のいずれにおいおも、サヌバヌは、ナヌザヌ゚ヌゞェントが同様の QUERY リク゚ストを Location によっお参照される新しい察象 URI に送信するこずで、元の QUERY リク゚ストを 達成できるこずを瀺唆しおいる。

301 たたは 302 応答の埌で POST を GET リク゚ストずしおリダむレクトする䟋倖は、 QUERY リク゚ストには適甚されないこずに泚意。

ステヌタスコヌド 303 (See Other、第15.4.4節、 [HTTP]の QUERY ぞの応答は、 元のク゚リが、Location 応答フィヌルドによっお参照される URI に察する通垞の取埗リク゚ストで 達成できるこずを瀺す[HTTP]、第 10.2.2節。HTTP では、これは、新しい察象 URI に GET リク゚ストを送信するこずを意味する。 この䟋は、付録 A.4.3に瀺されおいる。

2.6. æ¡ä»¶ä»˜ããƒªã‚¯ã‚šã‚¹ãƒˆ

遞択された衚珟第3.2節、[HTTP]は、QUERY リク゚ストの堎合、 その QUERY リク゚ストの等䟡なリ゜ヌス第2.2節に察する GET リク゚ストの 堎合ず同じである。

条件付き QUERY は、遞択された衚珟すなわち、コンテンツネゎシ゚ヌション埌のク゚リ結果を、 条件付きヘッダヌフィヌルドに蚘述された状況においおのみ、 応答で返すこずを芁求する。これは、第13節、[HTTP]で定矩されるずおりである。

付録 A.5を 䟋ずしお参照。

2.7. ã‚­ãƒ£ãƒƒã‚·ãƒ¥å‡Šç†

QUERY メ゜ッドぞの応答はキャッシュ可胜であり、キャッシュはこれを䜿甚 しおもよい。 その甚途は、次に埓っお埌続の QUERY リク゚ストを満たすこずである: 第4節、[HTTP-CACHING]。

QUERY リク゚ストのキャッシュキヌ第2節、[HTTP-CACHING]には、必ず リク゚ストコンテンツ第6節、[HTTP-CACHING]ず関連する メタデヌタ第8節、 [HTTP]を組み蟌たなければならない。

キャッシュ効率を改善するため、キャッシュは事前に陀去 しおもよい。 その察象は、リク゚ストコンテンツず関連するメタデヌタにおける、意味䞊重芁でない差異である。たずえば、 次のような方法による:

  • コンテンツ笊号化を陀去する第8.4節、 [HTTP]。
  • リク゚ストの Content-Type フィヌルドにあるメディアサブタむプの接尟蟞が瀺す、 圢匏䞊の慣䟋に関する知識に基づいお正芏化するたずえば "+json"。第 4.2.8節、[RFC6838]を参照。
  • リク゚ストの Content-Type フィヌルドによっお瀺される、 コンテンツ自䜓の意味論に関する知識に基づいお正芏化する。

このような倉換は、キャッシュキヌを生成する目的でのみ実行され、 リク゚スト自䜓を倉曎するものではないこずに泚意。

クラむアントは、"no-transform" キャッシュ指什を䜿甚しお第 5.2.1.6節、[HTTP-CACHING]、このような倉換が 行われないこずを望む旚を瀺すこずができるただし、この指什は助蚀にすぎない点に泚意。

QUERY メ゜ッドぞの応答のキャッシュ凊理は、本質的に GET ぞの応答のキャッシュ凊理より耇雑である。 キャッシュキヌを決定するために、リク゚ストのコンテンツを完党に読み取る必芁が あるためである。QUERY 応答が、Location 応答フィヌルド第2.4節を提䟛しお、 等䟡なリ゜ヌス第2.2節の URI を瀺す堎合、クラむアントは埌続のリク゚ストを GET に切り替えるこずで、凊理を簡玠化できる。

2.8. ç¯„囲 リク゚スト

QUERY の範囲リク゚ストの意味論は、GET のものず同じであり、 第14節、[HTTP]で定矩されるずおりである。ただし、バむト範囲リク゚スト 執筆時点で定矩されおいる唯䞀の範囲単䜍は、 QUERY リク゚ストの結果に察しおは、ほずんど有甚ではない。

ク゚リ圢匏は、結果集合を制限したり、ペヌゞ単䜍で取埗したりする独自の方法を定矩するこずが倚い。 たずえば、SQL の "FETCH FIRST ... ROWS ONLY" がある。HTTP 範囲リク゚ストの代わりに、 これらの組み蟌み機胜が䜿甚されるこずが想定される。


3. Accept-Query ヘッダヌフィヌルド

"Accept-Query" 応答ヘッダヌフィヌルドは、リ゜ヌスが QUERY メ゜ッドのサポヌトを盎接通知し、 同時に、䜿甚できる具䜓的なク゚リ圢匏のメディアタむプを識別するために 䜿甚できる。

Accept-Query は、メディア範囲のリスト第12.5.1節、 [HTTP]を、構造化フィヌルドの 構文 [STRUCTURED-FIELDS]で含む。メディア 範囲は、Token たたは String から成る List 型の構造化ヘッダヌフィヌルドによっお衚され、 パラメヌタヌを陀いたメディア範囲の倀を含む。

メディアタむプのパラメヌタヌがある堎合、それらは String 型たたは Token 型の構造化フィヌルドパラメヌタヌに 察応付けられる。Token ず String の遞択に意味䞊の違いはない。すなわち、 受信者は 倉換しおもよいToken から String ぞが、しおは ならない のは、受信した型に基づいお異なる凊理をするこずである。

メディアタむプは、Token に完党には察応しない。たずえば、先頭に数字を䜿甚できる。 このような堎合には、String 圢匏を䜿甚する必芁がある。

サポヌトされるワむルドカヌドの䜿甚法は、任意のタむプに䞀臎する "*/*" ず、 指定されたタむプの任意のサブタむプに䞀臎する "xxxx/*" のみである。

フィヌルド倀に列挙されるタむプの順序に意味はない。

Accept-Query フィヌルドの倀は、同じパスを共有するサヌバヌ䞊のすべおの URI に適甚される。 蚀い換えるず、ク゚リ成分は無芖される。同じリ゜ヌスぞのリク゚ストが 異なる Accept-Query 倀を返す堎合、最埌に受信した新鮮な倀第4.2節、 [HTTP-CACHING]によるが䜿甚される。

たずえば:

Accept-Query: "application/jsonpath", application/sql;charset="UTF-8"

このフィヌルドの構文は、"Accept" などの他のフィヌルドの構文ず䌌おいるように芋えるが 第12.5.1節、 [HTTP]、これは構造化フィヌルドであり、 したがっお 必ず 次に指定されたずおりに凊理しなければならない: 第4節、[STRUCTURED-FIELDS]。


4. ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£äžŠã®è€ƒæ…®äº‹é …

QUERY メ゜ッドには、すべおの HTTP メ゜ッドず同じ䞀般的なセキュリティ䞊の考慮事項が 適甚される。これらは、[HTTP]に蚘述されおいる。

これは、URIたずえば、ク゚リ成分にリク゚スト情報を枡すこずの 代替ずしお䜿甚できる。URI はリク゚ストコンテンツよりも、仲介者によっおログに蚘録されたり、 その他の凊理を受けたりしやすいため、堎合によっおはこちらが望たしい。たた、 ク゚リに機密情報が含たれる堎合には、URI がログに蚘録される可胜性が、 GET より QUERY を䜿甚する動機ずなるこずもある。

サヌバヌが QUERY リク゚ストの結果を衚す䞀時的なリ゜ヌスを䜜成したずえば、 Location たたは Content-Location フィヌルドで䜿甚するため、そのリ゜ヌスに URI を割り圓お、 リク゚ストにログぞ蚘録できない機密情報が含たれる堎合、その URI は 遞ぶべきである。その際、元のリク゚ストコンテンツの機密郚分を䞀切含たないように する。

QUERY コンテンツを誀っお正芏化するキャッシュや、リ゜ヌスがコンテンツを凊理する方法ず 倧きく異なる方法で正芏化するキャッシュは、 正芏化によっお誀った䞀臎が生じるず、䞍正確な応答を返す可胜性がある。

オリゞン間リ゜ヌス共有 (CORS) を実装するナヌザヌ゚ヌゞェントからの QUERY リク゚ストには、 「プリフラむト」リク゚ストが必芁ずなる。QUERY は、CORS セヌフリストに登録された メ゜ッドの集合に属しおいないためである[FETCH]を参照。


5. IANA に関する考慮事項

5.1. QUERY メ゜ッドの登録

IANA は、QUERY メ゜ッドを「ハむパヌテキスト転送プロトコル (HTTP) メ゜ッド レゞストリヌ」に远加した。その堎所は <http://www.iana.org/assignments/http-methods> である第 16.3.1節、[HTTP]を参照。

衚2: QUERY メ゜ッドの定矩
メ゜ッド名 安党 冪等 仕様
QUERY はい はい 第2節、RFC 10008

5.2. Accept-Query フィヌルドの登録

IANA は、Accept-Query フィヌルドを「ハむパヌテキスト転送プロトコル (HTTP) フィヌルド 名レゞストリヌ」に远加した。その堎所は <https://www.iana.org/assignments/http-fields> である第 16.1.1節、[HTTP]を参照。

衚3: Accept-Query フィヌルドの定矩
フィヌルド名 状態 構造化型 参照 コメント
Accept-Query 恒久 List 第3節、RFC 10008

6. 参考文献

6.1. 芏範的参考文献

[HTTP-CACHING]
Fielding, R., ç·š, Nottingham, M., ç·š, および J. Reschke, ç·š, “HTTP キャッシュ凊理”, STD 98, RFC 9111, DOI 10.17487/RFC9111, 6月 2022幎, <https://www.rfc-editor.org/info/rfc9111>.
[HTTP]
Fielding, R., ç·š, Nottingham, M., ç·š, および J. Reschke, ç·š, “HTTP の意味論”, STD 97, RFC 9110, DOI 10.17487/RFC9110, 6月 2022幎, <https://www.rfc-editor.org/info/rfc9110>.
[RFC2119]
Bradner, S., “キヌワヌド: RFC においお芁求レベルを瀺すために䜿甚するもの”, BCP 14, RFC 2119, DOI 10.17487/RFC2119, 3月 1997幎, <https://www.rfc-editor.org/info/rfc2119>.
[RFC8174]
Leiba, B., “曖昧さ: RFC 2119 のキヌワヌドにおける倧文字ず小文字”, BCP 14, RFC 8174, DOI 10.17487/RFC8174, 5月 2017幎, <https://www.rfc-editor.org/info/rfc8174>.
[STRUCTURED-FIELDS]
Nottingham, M. および P-H. Kamp, “構造化フィヌルド倀: HTTP 甹”, RFC 9651, DOI 10.17487/RFC9651, 2024幎9月, <https://www.rfc-editor.org/info/rfc9651>.
[URI]
Berners-Lee, T., Fielding, R., および L. Masinter, “統䞀リ゜ヌス 識別子 (URI): 汎甚構文”, STD 66, RFC 3986, DOI 10.17487/RFC3986, 1月 2005幎, <https://www.rfc-editor.org/info/rfc3986>.

6.2. 参考情報

[FETCH]
WHATWG, “FETCH”, WHATWG 珟行 暙準, <https://fetch.spec.whatwg.org>.
コミット スナップショット: <https://fetch.spec.whatwg.org/commit-snapshots/3bab31a55154bda73f25b45a23df718616f2f64e/>.
[RFC3253]
Clemm, G., Amsden, J., Ellison, T., Kaler, C., および J. Whitehead, “バヌゞョン管理拡匵: WebDAV (Web 分散オヌサリングおよびバヌゞョン管理) 向け”, RFC 3253, DOI 10.17487/RFC3253, 3月 2002幎, <https://www.rfc-editor.org/info/rfc3253>.
[RFC4918]
Dusseault, L., ç·š, “HTTP 拡匵: Web 分散オヌサリングおよびバヌゞョン管理 (WebDAV) 向け”, RFC 4918, DOI 10.17487/RFC4918, 2007幎6月, <https://www.rfc-editor.org/info/rfc4918>.
[RFC5323]
Reschke, J., ç·š, Reddy, S., Davis, J., および A. Babich, “Web 分散オヌサリング およびバヌゞョン管理 (WebDAV) SEARCH”, RFC 5323, DOI 10.17487/RFC5323, 2008幎11月, <https://www.rfc-editor.org/info/rfc5323>.
[RFC6838]
Freed, N., Klensin, J., および T. Hansen, “メディアタむプの仕様 および登録手続き”, BCP 13, RFC 6838, DOI 10.17487/RFC6838, 1月 2013幎, <https://www.rfc-editor.org/info/rfc6838>.
[RFC8259]
Bray, T., ç·š, “ JavaScript Object Notation (JSON) デヌタ亀換圢匏”, STD 90, RFC 8259, DOI 10.17487/RFC8259, 2017幎12月, <https://www.rfc-editor.org/info/rfc8259>.
[RFC9535]
Gössner, S., ç·š, Normington, G., ç·š, および C. Bormann, ç·š, “JSONPath: ク゚リ 匏JSON 甚”, RFC 9535, DOI 10.17487/RFC9535, 2024幎2月, <https://www.rfc-editor.org/info/rfc9535>.
[URL]
WHATWG, “URL”, WHATWG 珟行暙準, <https://url.spec.whatwg.org>.
コミット スナップショット: <https://url.spec.whatwg.org/commit-snapshots/52526653e848c5a56598c84aa4bc8ac9025fb66b/>.
[XSLT]
Kay, M., ç·š, “XSL 倉換 (XSLT) バヌゞョン 3.0”, W3C 勧告, 2017幎6月, <https://www.w3.org/TR/2017/REC-xslt-30-20170608/>.
最新 バヌゞョンの堎所: https://www.w3.org/TR/xslt-30/.

付録 A. äŸ‹

以䞋の䟋は、説明のみを目的ずする。実際にこれほど短いク゚リを送信する必芁がある堎合、 GET を䜿甚する方がよい可胜性が高い。

ほずんどの䟋で䜿甚するメディアタむプは、"application/x-www-form-urlencoded" であるブラりザヌの ナヌザヌクラむアントからの POST リク゚ストで䜿甚されるもので、"application/x-www-form-urlencoded" 、[URL]で定矩される。Content-Length フィヌルドは、 簡朔にするため省略しおいる。

A.1. å˜çŽ”ãªã‚¯ã‚šãƒª

以䞋は、盎接応答を䌎う単玔なク゚リである:

QUERY /contacts HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
Accept: application/json

select=surname,givenname,email&limit=10&match=%22email=*@example.*%22

応答:

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "surname": "Smith",
    "givenname": "John",
    "email": "smith@example.org" },
  { "surname": "Jones",
    "givenname": "Sally",
    "email": "sally.jones@example.com" },
  { "surname": "Dubois",
    "givenname": "Camille",
    "email": "camille.dubois@example.net" }
]

A.2. QUERY サポヌトの怜出

QUERY のサポヌトを怜出する単玔な方法は、OPTIONS第9.3.7節、 [HTTP]メ゜ッドによっお提䟛される:

OPTIONS /contacts HTTP/1.1
Host: example.org

応答:

HTTP/1.1 200 OK
Allow: GET, QUERY, OPTIONS, HEAD

Allow 応答フィヌルド第10.2.1節、 [HTTP]は、指定されたリ゜ヌスで サポヌトされるメ゜ッドの集合を瀺す。

OPTIONS の䜿甚に代わる方法もある。たずえば、サヌバヌのサポヌトに関する事前知識なしに、 QUERY リク゚ストを詊みるこずができる。その堎合、サヌバヌはリク゚ストを 凊理するか、あるいは 405 (Method Not Allowed、第15.5.6節、 [HTTP]などの 4xx ステヌタスで、 Allow 応答フィヌルドを含めお応答するこずがある。

A.3. QUERY 圢匏の怜出

QUERY でサポヌトされるメディアタむプは、Accept-Query 応答フィヌルドを通じお怜出できる第3節:

HEAD /contacts HTTP/1.1
Host: example.org

応答:

HTTP/1.1 200 OK
Content-Type: application/xhtml
Accept-Query: application/x-www-form-urlencoded, application/sql

どのリク゚ストメ゜ッドぞの応答に Accept-Query が含たれるかは、 アクセス先のリ゜ヌスによっお異なる。

Accept-Query を確認する代わりに、QUERY リク゚ストを行い、その埌、 415 応答 (Unsupported Media Type、第 15.5.16節、[HTTP]などの 4xx ステヌタスの堎合に、 Accept 応答フィヌルドを調べる方法もある第12.5.1節、 [HTTP]:

HTTP/1.1 415 Unsupported Media Type
Content-Type: application/xhtml
Accept: application/x-www-form-urlencoded, application/sql

A.4. Content-Location, Location、および 間接応答

次の各節で説明したように、2.3節および2.4節にある、成功応答の Content-Location および Location 応答 フィヌルド2xx、第15.3節、 [HTTP]は、 GET リク゚ストに応答する代替リ゜ヌスを識別する方法を提䟛する。それは、受信したリク゚ストの 結果を取埗するため、たたは将来、同じ操䜜を実行するリク゚ストを行うためのものである。 付録 A.1の䟋に戻るず:

QUERY /contacts HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
Accept: application/json

select=surname,givenname,email&limit=10&match=%22email=*@example.*%22

応答:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /contacts/stored-results/17
Location: /contacts/stored-queries/42
Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT
Date: Sun, 17 Nov 2024, 16:10:24 GMT

[
  { "surname": "Smith",
    "givenname": "John",
    "email": "smith@example.org" },
  { "surname": "Jones",
    "givenname": "Sally",
    "email": "sally.jones@example.com" },
  { "surname": "Dubois",
    "givenname": "Camille",
    "email": "camille.dubois@example.net" }
]

A.4.1. Content-Location の䜿甚

䞊で受信した Content-Location 応答フィヌルドは、そのフィヌルドが珟れた QUERY 応答の結果を保持するリ゜ヌスを識別する:

GET /contacts/stored-results/17 HTTP/1.1
Host: example.org
Accept: application/json

応答:

HTTP/1.1 200 OK
Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT
Date: Sun, 17 Nov 2024, 16:10:25 GMT

[
  { "surname": "Smith",
    "givenname": "John",
    "email": "smith@example.org" },
  { "surname": "Jones",
    "givenname": "Sally",
    "email": "sally.jones@example.com" },
  { "surname": "Dubois",
    "givenname": "Camille",
    "email": "camille.dubois@example.net" }
]

サヌバヌがこのリ゜ヌスを無期限に実装し続ける保蚌はないこずに 泚意。したがっお、゚ラヌ応答の埌、クラむアントは、 新しい代替の堎所を取埗するために、元の QUERY リク゚ストを再実行する必芁がある。

A.4.2. Location の䜿甚

Location 応答フィヌルドは、GET に察しお、 元の QUERY リク゚ストず同じ凊理およびパラメヌタヌによる珟圚の結果を返すリ゜ヌスを識別する。

GET /contacts/stored-queries/42 HTTP/1.1
Host: example.org
Accept: application/json

この䟋では、2024-11-17T16:12:01Z に1぀の゚ントリヌが削陀された Last-Modified フィヌルドで瀺されるずおり。したがっお、応答には2぀の゚ントリヌのみが含たれる:

HTTP/1.1 200 OK
Content-Type: application/json
Last-Modified: Sun, 17 November 2024, 16:12:01 GMT
ETag: "42-1"
Date: Sun, 17 Nov 2024, 16:13:17 GMT

[
  { "surname": "Smith",
    "givenname": "John",
    "email": "smith@example.org" },
  { "surname": "Dubois",
    "givenname": "Camille",
    "email": "camille.dubois@example.net" }
]

サヌバヌが匕き続きそのリ゜ヌスを公開しおおり、 ク゚リ結果に倉曎がないず仮定するず、次を含む埌続の条件付き GET リク゚スト:

If-None-Match: "42-1"

は、304 (Not Modified) 応答を生じさせる第 15.4.5節、[HTTP]。

A.4.3. é–“接応答

サヌバヌは、「間接」応答第2.5節を、ステヌタスコヌド 303 (See Other、第 15.4.4節、[HTTP]を䜿甚しお送信できる。

次の冒頭にあるリク゚ストが䞎えられた堎合: 付録 A.4、 サヌバヌは次のように応答するこずがある:

HTTP/1.1 303 See Other
Content-Type: text/plain
Date: Sun, 17 Nov 2024, 16:13:17 GMT
Location: /contacts/stored-queries/42

"/contacts/stored-queries/42" にある保存枈みク゚リを参照。

これは、ク゚リの結果を返さない点を陀けば、 盎接応答に Location を含めるこずに䌌おいる。これにより、サヌバヌは、 代替リ゜ヌスの生成たたは再利甚だけを行うこずができる。このリ゜ヌスは、その埌、付録 A.4.2に瀺すように䜿甚できる。

A.5. æ¡ä»¶ä»˜ããƒªã‚¯ã‚šã‚¹ãƒˆ

QUERY を実装し、リク゚ストメディアタむプずしお "application/sql" ず "application/xslt+xml" [XSLT]をサポヌトする リ゜ヌスを考える。このリ゜ヌスは、"text/csv" ずしお応答を生成できる。ク゚リ察象のデヌタセットは、 RFC 文曞の情報を含み、ク゚リは10幎単䜍でグルヌプ化された情報を返す:

QUERY /rfc-index.xml HTTP/1.1
Host: example.org
Date: Sun, 7 Sep 2025, 00:00:00 GMT
Content-Type: application/xslt+xml
Accept: text/csv

...XSLT を䜿甚したク゚リコンテンツ...

応答:

HTTP/1.1 200 OK
Date: Sun, 7 Sep 2025, 00:00:00 GMT
Location: /stored-queries/4815162342
Content-Type: text/csv
Accept-Query: "application/sql", "application/xslt+xml"
Last-Modified: Sun, 31 Aug 2025, 08:44:00 GMT
Vary: Accept-Query, Content-Encoding, Content-Type

decade, total, with errata, % with errata, average page count
1960, 26, 5, 19.2, 5.3
1970, 666, 18, 2.7, 6.1
1980, 376, 44, 11.7, 23.4
1990, 1593, 269, 16.9, 25.5
2000, 2888, 1048, 36.3, 27.3
2010, 2954, 895, 30.3, 26.1
2020, 1133, 230, 20.3, 26.2

ここで、サヌバヌは、等䟡なリ゜ヌスにパス "/stored-queries/4815162342" を 割り圓おおいる第2.4節。 これは、埌で GET ずずもに䜿甚するためである。

その埌、クラむアントはク゚リを繰り返すが、 結果が倉曎された堎合にのみ返すよう指定する:

QUERY /rfc-index.xml HTTP/1.1
Host: example.org
Date: Mon, 8, Sep 2025, 11:00:00 GMT
Content-Type: application/sql
Accept: text/csv
If-Modified-Since: Sun, 31 Aug 2025, 08:44:00 GMT
Vary: Accept-Query, Content-Type

...同じク゚リだが、SQL を䜿甚...

ク゚リ察象のデヌタは倉曎されおいないため、サヌバヌは次のように応答する:

HTTP/1.1 304 Not Modified
Date: Mon, 8 Sep 2025, 11:00:00 GMT
Content-Type: text/csv
Location: /stored-queries/4815162342
Accept-Query: "application/sql", "application/xslt+xml"
Last-Modified: Sun, 31 Aug 2025, 08:44:00 GMT
Vary: Accept-Query, Content-Type

サヌバヌが等䟡なリ゜ヌスの URI を瀺したため、そのリ゜ヌスには GET でアクセスできる。特に、これによりク゚リリク゚ストのコンテンツの再送信を回避できる:

GET /stored-queries/4815162342 HTTP/1.1
Host: example.org
Date: Sun, 21, Sep 2025, 12:08:00 GMT
Accept: text/csv
If-Modified-Since: Sun, 31 Aug 2025, 00:00:00 GMT

ここでは、デヌタセットの状態が実際に倉曎されたため、新しいコンテンツが返される:

HTTP/1.1 200 OK
Date: Sun, 21, Sep 2025, 12:08:00 GMT
Content-Type: text/csv
Last-Modified: Thu, 18 Sep 2025, 19:56:00 GMT
Vary: Accept-Query, Content-Encoding, Content-Type

decade, total, with errata, % with errata, average page count
1960, 26, 5, 19.2, 5.3
1970, 666, 18, 2.7, 6.1
1980, 376, 44, 11.7, 23.4
1990, 1593, 269, 16.9, 25.5
2000, 2888, 1048, 36.3, 27.3
2010, 2954, 895, 30.3, 26.1
2020, 1133, 230, 20.3, 26.2

珟圚の幎代に察応する行の倉曎に泚意。

以䞋の図は、条件付きリク゚ストの䜿甚ず、 等䟡なリ゜ヌスに URI が割り圓おられた堎合およびクラむアントが それを掻甚しおいる堎合に、どのような違いが生じ埗るかを瀺す。架空のフィヌルド名 "Validator" は、 説明のために䜿甚しおいる。

クラむアント リ゜ヌス コンテンツ付き QUERY 200 OK Validator: foo コンテンツ付き QUERY ('foo' による条件付き) 304 Not Modified Validator: foo 状態倉曎 コンテンツ付き QUERY ('foo' による条件付き) 200 OK Validator: bar

図1: QUERY のみを䜿甚するデヌタフロヌ

クラむアント リ゜ヌス コンテンツ付き QUERY 等䟡なリ゜ヌス (/xyz を生成) 200 OK Validator: foo Location: /xyz GET ('foo' による条件付き) 304 Not Modified Validator: foo 状態倉曎 GET ('foo' による条件付き) 200 OK Validator: bar

図2: 等䟡なリ゜ヌスぞの GET を䜿甚するデヌタフロヌ

A.6. ãã®ä»–のク゚リ圢匏

以䞋の䟋は、JSON 圢匏の [RFC8259] RFC 正誀情報デヌタベヌスぞのリク゚ストを瀺す。

以䞋のリク゚ストは、拡匵可胜スタむルシヌト蚀語倉換 (XSLT) を䜿甚しお、 幎ごず、および定矩された正誀情報の皮別ごずに集蚈した正誀情報を抜出する。

QUERY /errata.json HTTP/1.1
Host: example.org
Content-Type: application/xslt+xml
Accept: application/xml, text/csv

<transform xmlns="http://www.w3.org/1999/XSL/Transform"
  xmlns:j="http://www.w3.org/2005/xpath-functions"
  version="3.0">

  <output method="text"/>

  <param name="input"/>

  <variable name="json"
    select="json-to-xml(unparsed-text($input))"/>

  <variable name="sc">errata_status_code</variable>
  <variable name="sd">submit_date</variable>

  <template match="/">
    <text>year, total, rejected, verified, hdu, reported</text>
    <text>&#10;</text>
    <variable name="en" select="$json//j:map"/>
    <for-each-group select="$en"
      group-by="substring-before(j:string[@key=$sd],'-')">
      <sort select="current-grouping-key()"/>
      <variable name="year" select="current-grouping-key()"/>
      <variable name="errata" select=
        "$en[$year=substring-before(j:string[@key=$sd],'-')]"/>
      <value-of select="concat(
        $year,
        ', ',
        count($errata),
        ', ',
        count($errata['Rejected'=j:string[@key=$sc]]),
        ', ',
        count($errata['Verified'=j:string[@key=$sc]]),
        ', ',
        count(
          $errata['Held for Document Update'=j:string[@key=$sc]]),
        ', ',
        count($errata['Reported'=j:string[@key=$sc]]),
        '&#10;')"/>
    </for-each-group>
  </template>

</transform>

応答:

HTTP/1.1 200 OK
Content-Type: text/csv
Accept-Query: "application/jsonpath", "application/xslt+xml"
Date: Wed, 19 Feb 2025, 17:10:01 GMT

year, total, rejected, verified, hdu, reported
2000, 14, 0, 14, 0, 0
2001, 72, 1, 70, 1, 0
2002, 124, 8, 104, 12, 0
2003, 63, 0, 61, 2, 0
2004, 89, 1, 83, 5, 0
2005, 156, 10, 96, 50, 0
2006, 444, 54, 176, 214, 0
2007, 429, 48, 188, 193, 0
2008, 423, 52, 165, 206, 0
2009, 331, 39, 148, 144, 0
2010, 538, 80, 232, 222, 4
2011, 367, 47, 170, 150, 0
2012, 348, 54, 149, 145, 0
2013, 341, 61, 169, 106, 5
2014, 342, 73, 180, 72, 17
2015, 343, 79, 145, 89, 30
2016, 295, 46, 122, 82, 45
2017, 303, 46, 120, 84, 53
2018, 350, 61, 118, 98, 73
2019, 335, 47, 131, 94, 63
2020, 387, 68, 117, 123, 79
2021, 321, 44, 148, 63, 66
2022, 358, 37, 198, 40, 83
2023, 262, 38, 121, 33, 70
2024, 322, 33, 125, 23, 141
9999, 1, 0, 0, 1, 0

Accept-Query 応答フィヌルドが、別のク゚リ圢匏である JSONPath [RFC9535]もサポヌトされおいるこずを 瀺しおいる点に泚意。以䞋のリク゚ストは、送信された正誀情報のうち、华䞋されたものすべおの識別子を 2024幎以降に぀いお報告する:

QUERY /errata.json HTTP/1.1
Host: example.org
Content-Type: application/jsonpath
Accept: application/json

$..[
     ?@.errata_status_code=="Rejected"
     && @.submit_date>"2024"
   ]
   ["doc-id"]

応答:

HTTP/1.1 200 OK
Content-Type: application/json
Accept-Query: "application/jsonpath", "application/xslt+xml"
Date: Thu, 20 Feb 2025, 09:55:42 GMT
Last-Modified: Thu, 20 Feb 2025 06:10:01 GMT

[
  "RFC1185","RFC8407","RFC6350","RFC8467","RFC1157","RFC9543",
  "RFC9076","RFC7656","RFC2822","RFC9460","RFC2104","RFC6797",
  "RFC9499","RFC9557","RFC2131","RFC2328","RFC9001","RFC3325",
  "RFC9438","RFC2526","RFC2985","RFC7643","RFC9132","RFC6376",
  "RFC9110","RFC9460","RFC7748","RFC9497","RFC8463","RFC4035",
  "RFC7239","RFC9083","RFC9537","RFC9537","RFC9420","RFC9000",
  "RFC9656","RFC9110","RFC2324","RFC2549","RFC6797","RFC2549",
  "RFC8894"
]

付録 B. ãƒ¡ã‚œãƒƒãƒ‰å 'QUERY' の遞定

「ハむパヌテキスト転送プロトコル (HTTP) メ゜ッドレゞストリヌ」<http://www.iana.org/assignments/http-methods>には、 「安党」か぀「冪等」ずいう性質を持぀他の3぀のメ゜ッドが、すでに含たれおいる: "PROPFIND" [RFC4918], "REPORT" [RFC3253], および "SEARCH" [RFC5323]。

これらのいずれかを再利甚し、 本仕様が新しいメ゜ッド "QUERY" ずしお定矩する内容に合うよう曎新するこずも可胜であった。実際、本仕様の初期 段階では "SEARCH" を䜿甚しおいた。

最終的にメ゜ッド名 "QUERY" が遞ばれた理由は、次のずおりである:

  • 他の候補は、リク゚ストコンテンツに汎甚的なメディアタむプ"application/xml"を䜿甚する。 リク゚ストの意味論は、リク゚ストコンテンツのみに䟝存する。
  • さらに、それらはいずれも WebDAV の掻動に由来し、これに぀いおは倚くの人が耇雑な 感情を抱いおいる。
  • "QUERY" は、URI のク゚リ成分ずの関係を適切に捉えおいる。

謝蟞

HTTP ワヌキンググルヌプのすべおのメンバヌによるアむデア、レビュヌ、フィヌドバックに感謝する。

特に、次の方々の貢献に謝意を衚する: Carsten Bormann, Mark Nottingham, Martin Thomson, Michael Thornburgh, Roberto Polli, Roy Fielding, および Will Hawkins。


貢献者

Ashok Malhotra は、本仕様に぀ながる初期の議論に参加した:

Ashok Malhotra
電子メヌル: malhotrasahib@gmail.com

この HTTP メ゜ッドに関する議論は、AsbjÞrn Ulsberg によっお、HTTP ワヌクショップで再開された。 その開催幎は2019幎である:

AsbjÞrn Ulsberg
電子メヌル: asbjorn@ulsberg.no
URI: https://asbjor.nu/

著者の連絡先

Julian Reschke
greenbytes GmbH
Hafenweg 16
MÃŒnster, 48155
ドむツ
電子メヌル: julian.reschke@greenbytes.de
URI: https://greenbytes.de/tech/webdav/
James M Snell
Cloudflare
電子メヌル: jasnell@gmail.com
Mike Bishop
Akamai
電子メヌル: mbishop@evequefou.be