世界を動かす技術を、日本語で。

RFC 10008: 新しいHTTPクエリメソッド

2026年6月17日原文(rfc-editor.org)

概要

  • HTTP QUERYメソッド の仕様を定義
  • 安全性冪等性 を持つリクエスト方式
  • POSTGET との違いと利点を解説
  • キャッシュリダイレクト などの挙動を詳細に説明
  • 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 公式ページを参照。

Hackerたちの意見

え、もう1万超えたの?

誰かがRFC 10000がいつ公開されるかのあいまいな賭けをしてるけど、数字が9998から10008に直行したよ。誰も勝たないね! https://manifold.markets/CollectedOverSpread/when-will-rfc-1...

これが実際にGETリクエストのクエリストリングを置き換えるなら、ブラウザのブックマークがリクエストパラメータを保持できるようになることをめっちゃ期待してる。

たぶん無理だろうね。POSTがクエリに使われるときは置き換わると思う。

強力なモチベーションになる例を入れたら、もっと売り込めたかも。GETとして簡単に表現できる例を使うのは、すごく気が散る。大きなJSONフィルタリング構造のQUERYを想像してみたり、リクエストボディに画像入力を使ったりすると、リクエストボディをキャッシュキーの一部に含めるのはすごく変な感じがする。無限でユーザーが制御できるキャッシュキーを暗示してるし、実際に意味のある一般的なキャッシング戦略はリクエストボディのビット単位の比較(またはハッシュ)になるけど、敵対的なシナリオではキャッシュバスティングが簡単になっちゃう。これって、明らかにニッチなユースケースに対して複数の意味的な奇妙さを一度に引き起こすから、難しいよね。もし複雑なフィルタリングや画像のような複雑な入力が必要なサービスを書いてるなら、キャッシングのどんな形(例えば、結合の個別データカラムやデコードされた画像入力の知覚ハッシュでキー付けされた埋め込みなど)もHTTPレイヤーからは遠く離れていて、リクエストのビット表現とは全く関係ない。なんでこんなことを一般的な方法で捉えようとするの?POSTの新しいヘッダーとしてこのキャッシングの意味を捉えようとする方がずっといいと思う。「Vary: request-body」みたいな感じで。完全に後方互換性があって、CDNの0.1%のユースケース以外は無視できるし、その挙動が役立つかもしれない。

なんでこんなことを一般的な方法で捉えようとするの? POSTは冪等性がないから、キャッシュやリトライの制御フローを簡単にするためにその奇妙な意味を解決することが目的なんだと思う。アプリケーションレイヤーで考えるなら、あなたの視点は100%正しいけど、専用のメソッドがあれば、その挙動をHTTPインフラストラクチャからすぐに得られるし(ハイパースケーラーのルーターでも、Apache/Nginx/ブラウザでも)、POSTをクエリとして扱うエッジケースを自分で実装する必要がなくなるよ。

ボディコンテンツ(クエリ)のハッシュをURLパラメータとして使うかな /?hash=123456789

「それは、無制限でユーザーが制御できるキャッシュキーを意味します。GETのURIのクエリ部分は、実際にはほとんど制限がなく、ユーザーが制御できるもので、確かにキャッシュキーの一部として使われています(だってURIの一部だから)。だから、あなたがこの異議を唱える理由がよくわからないんですよね。」

「リクエストボディとして画像を提供することはできるけど、b64クエリパラメータを使えばもうできてたよね。頑張れば、提案された標準をうまく使えないこともないけど。クエリパラメータ付きのGETはすでに不透明で、キャッシュバスティングが簡単すぎる。」

「それは、無制限でユーザーが制御できるキャッシュキーを意味します。懸念は理解できるけど、クエリレベルでのキャッシングは完全にオプショナルだから、特定の「フィルター」だけをキャッシュするのは全然有効だよ。」

「ブラウザは、もし小さいキャッシュキーが欲しいなら、ボディの衝突耐性ハッシュ(例えばSHA-256)を単純に保存すればいい。クエリパラメータに同じように適用されるキャッシング関連の攻撃はあまり思いつかないな。キャッシュをフラッドさせたいなら、ユニークな30文字のクエリパラメータを生成するのは、30MBのリクエストボディを生成するのと同じくらい簡単だよ。」

「フルスタックをコントロールしているなら、ここで説明されている機能はPOSTで実装できるよ。これが関わるのは、あなたのサービスのクライアントがバックエンドの動作にルールを課そうとする場合だけ。私の答えはノーだね。私のサービスがどのように動作するかの契約を定義するのは私だから。」

Hacker Newsで議論の続きを見る