概要
- HTTP QUERYメソッド の仕様を定義
- 安全性 と 冪等性 を持つリクエスト方式
- POST や GET との違いと利点を解説
- キャッシュ や リダイレクト などの挙動を詳細に説明
- IETF標準文書 としての位置づけ
HTTP QUERYメソッドの概要
- QUERYメソッド は、HTTPリクエストで 安全かつ冪等な問い合わせ を実現
- リクエストボディ に処理内容を記述し、ターゲットリソースがその内容を処理
- GET ではURI長制限により難しい大量データの問い合わせも、 QUERY ならボディで送信可能
- POST と異なり、 自動再送 や キャッシュ が安全に行える設計
- サーバー は、問い合わせや結果に URI を割り当て可能
GET・QUERY・POSTの比較
- GET
- 安全性: あり
- 冪等性: あり
- 問い合わせ自体のURI: 必須
- 結果リソースのURI: 任意
- キャッシュ: あり
- ボディ: 意味なし
- QUERY
- 安全性: あり
- 冪等性: あり
- 問い合わせ自体のURI: 任意 (Locationヘッダで指定可)
- 結果リソースのURI: 任意 (Content-Locationヘッダで指定可)
- キャッシュ: あり
- ボディ: 必須 (ターゲットリソースごとに意味が決まる)
- POST
- 安全性: なし
- 冪等性: なし
- 問い合わせ自体のURI: なし
- 結果リソースのURI: 任意
- キャッシュ: 限定的 (GET/HEADでのみ有効)
- ボディ: 必須 (ターゲットリソースごとに意味が決まる)
用語・記法
- URIクエリパラメータ :URIのクエリ部分に含まれるパラメータ
- クエリコンテンツ :QUERYリクエストのボディ部分
- RFC2119/RFC8174 のキーワード(MUST/SHOULD等)は大文字のみ有効
QUERYメソッドの詳細
- QUERY は、サーバー側でクエリ処理を実行するためのメソッド
- リクエストボディ と Content-Type が必須
- ターゲットURIのクエリ部分もリソース特定に利用可能だが、詳細はリソース依存
- 安全性 :リソース状態を変更しない
- 冪等性 :再送やリトライが安全
- 200 OK レスポンス:クエリ成功と結果データを示す
Equivalent Resource(等価リソース)
- QUERYリクエスト に対する等価リソースは、 GET でアクセス可能なリソース
- メディアタイプ や メタデータ も考慮される
- サーバーはこのリソースに URI を割り当てることも可能
Content-Location/Locationヘッダ
- Content-Location :クエリ結果に対応するリソースのURIを示す
- Location :QUERYリクエスト自体に対応する等価リソースのURIを示す
- どちらも 一時的 なURIの場合がある
リダイレクト対応
- 301/308 :恒久的な移動、 Location ヘッダで新URIを案内
- 302/307 :一時的な移動、 Location ヘッダで新URIを案内
- 303 :GETで新しいURIから結果取得を推奨
- POSTのリダイレクト例外 (GETへの変換)は QUERYには適用されない
条件付きリクエスト
- GETの条件付きリクエスト と同様、 QUERY でも利用可能
- 条件ヘッダ (If-Modified-Since等)でレスポンス制御
キャッシュ
- QUERYレスポンス は キャッシュ可能
- キャッシュキー にはリクエストボディやメタデータも含める必要
- no-transform ディレクティブでキャッシュ時の変換抑止も可能(推奨レベル)
- Locationヘッダ で等価リソースURIを案内することで、以降はGETで効率的に取得可能
Rangeリクエスト
- QUERY のRangeリクエストは GET と同じ意味
- ただし、 バイト範囲指定 は通常のクエリ結果にはあまり有用でない
- 多くのクエリ形式(例:SQL)は独自のページングや制限方法を持つため、そちらを推奨
Accept-Queryヘッダ
- Accept-Query ヘッダで、リソースが QUERYメソッド対応 かつ 対応メディアタイプ を通知可能
- Structured Fields 構文(トークンまたは文字列のリスト)を利用
この内容は IETF標準化プロセス に基づき、 著作権・ライセンス 等の規定も明記されています。詳細やフィードバックは RFC 10008 公式ページを参照。