HTTP 402 (Payment Required) とは何ですか?

一言で言えば、サーバーが「このリソースを利用するには支払いが必要です」と言っている状態です。

注意:402 は HTTP 仕様において依然として Reserved(予約済み) とされているため、多くのブラウザやサイトでは表示されることがありません。

HTTP 402 を理解する:完全ガイド

HTTP 402 Payment Required は、HTTP 仕様の中で最も神秘的で活用されていないステータスコードの一つです。404 (Not Found) や 401 (Unauthorized) などの有名なコードとは異なり、402 はウェブ上でネイティブな決済メカニズムを可能にするという先見の明を持って設計されました。

サーバーが 402 レスポンスを返すとき、それは明確なメッセージを伝えています。「このリソースは存在し、あなたの認証情報も正しいですが、アクセスするには支払いが必要です。」 これは、通常認証や認可の問題を示す他の 4xx クライアントエラーコードとは根本的に異なります。

HTTP 402 の歴史

402 ステータスコードには、初期のウェブコマースに対する楽観的な期待を反映した興味深い歴史があります。

1990年代:当初のビジョン

HTTP 402 は、1997年に公開された最初の HTTP/1.1 仕様 (RFC 2068) に含まれており、「将来の使用のために予約済み」と明記されていました。当時は、電子商取引の進化に伴い、支払い要求の標準化された方法が不可欠になると考えられていました。HTTP の設計者たちは、デジタルマイクロペイメントが一般的になると予測していました。

2000年代〜2010年代:停滞期

20年以上にわたって仕様の一部であったにもかかわらず、402 はほとんど使われないままでした。標準化されたデジタル決済システムの欠如と、プラットフォームを越えた決済フローの実装の複雑さにより、ウェブサイトは独自の色々な決済フローを開発することになりました。

2020年代:ルネサンス

暗号通貨、USDC のようなステーブルコイン、そして x402 のようなプロトコルの登場により、402 ステータスコードはようやくその目的を見出しました。現代のブロックチェーン技術は、HTTP とシームレスに連携できる標準化されたプログラム可能な決済レイヤーという、欠けていたパズルの一片を提供しています。

HTTP 402 は 401、403、404 とどう違うのですか?

これらのステータスコードの違いを理解することは、適切なウェブ開発と API 設計において非常に重要です。

ステータス 意味 一般的なシナリオ 必要なユーザーアクション
401 Unauthorized 認証が必要 未ログイン、トークンの期限切れ ログインまたは認証情報の更新
403 Forbidden 認証済みだが許可なし アカウントに権限がない 管理者にアクセス権をリクエスト
402 Payment Required 支払いが必要 ペイ・パー・ビュー、マイクロペイメント 決済トランザクションを完了
404 Not Found リソースが見つからない リンク切れ、コンテンツの削除 URLを確認するかサポートに連絡

主な違い

なぜ HTTP 402 はめったに見られなかったのか?

1997年から HTTP 仕様の一部であったにもかかわらず、402 の採用率は非常に低いものでした。その理由は以下の通りです。

1. 標準的な決済プロトコルがなかった

HTTP 仕様はステータスコードを定義しましたが、支払いがどのように行われるべきかは規定していませんでした。標準化された決済ヘッダー、リクエスト形式、またはレスポンス構造がなかったため、それぞれの実装に互換性がありませんでした。

2. 従来の決済の複雑さ

クレジットカード決済には、決済プロセッサとの複雑な統合、PCI コンプライアンス、継続課金ロジック、不正防止システムが必要です。このオーバーヘッドにより、少額のトランザクションに 402 を使用するのは非現実的でした。

3. マイクロペイメントの摩擦

従来の決済システムには最低取引手数料があり、マイクロペイメント(1ドル未満)を経済的に不可能にしていました。取引コストが 0.30 ドルの場合、0.05 ドルの記事アクセス料は成立しません。

4. 代替ソリューション

企業は代替案を開発しました。サブスクリプションモデル、広告ベースのコンテンツ、OAuth ベースのアクセストークン、または JavaScript ベースのアクセス制御で 200 OK を返すカスタムペイウォールなどです。

HTTP 402 の技術仕様

RFC 9110(現在の HTTP 仕様)によると、402 ステータスコードは以下のように定義されています。

RFC 9110 セクション 15.5.3:
「402 (Payment Required) ステータスコードは将来の使用のために予約されています。」

レスポンスヘッダー

公式に標準化されてはいませんが、一般的な実装には以下が含まれます。

x402 プロトコルヘッダー

x402 プロトコルは、包括的な決済ネゴシエーションシステムによってこれらのヘッダーを標準化しています。x402 対応のサーバーから 402 レスポンスを受け取ると、レスポンスには決済を自動的に完了するために必要なすべての情報が含まれています。

HTTP 402 の現実世界のユースケース

402 ステータスコードは、いくつかの新しいユースケースに特に適しています。

1. API の収益化

API のコールごとに課金する場合に 402 を使用できます。AI サービス、データ API、プレミアム機能にサブスクリプションなしでアクセスでき、使った分だけ支払うことができます。

2. コンテンツのマイクロペイメント

ニュース記事、研究論文、プレミアムコンテンツを少額の支払いでアンロックできます。サブスクリプションは不要で、個別のコンテンツに対して支払うだけです。

3. 機器間 (M2M) 決済

自律型エージェントやボットが、人間の介入なしに有料リソースにアクセスして支払いを行うことができます。402 レスポンスは、自動決済処理に必要なすべてを提供します。

4. 分散型サービス

Web3 アプリケーションは 402 を使用して分散型リソースへのアクセスを制限し、決済は USDC や他のステーブルコインでオンチェーンで決済されます。

5. ゲームとデジタル商品

ゲーム内購入、デジタルアセット、プレミアム機能を、402 レスポンスによってトリガーされる即時決済でアンロックできます。

ブラウザとプラットフォームのサポート

すべてのモダンブラウザは 402 を有効な HTTP ステータスコードとして認識しますが、組み込みの処理機能は持っていません。

プラットフォーム ステータス 備考
Chrome/Edge ✅ 認識済み クライアントエラーとして表示
Firefox ✅ 認識済み クライアントエラーとして表示
Safari ✅ 認識済み クライアントエラーとして表示
Node.js/fetch ✅ フルサポート プログラムで処理可能
cURL ✅ フルサポート ステータスコード 402 を返す

ブラウザは 402 決済を自動的に処理しませんが、クライアントサイドのライブラリやブラウザ拡張機能が 402 レスポンスをインターセプトして決済フローをトリガーできます。

x402 がどのように 402 を本物の決済体験に変えるのか

それこそが x402 が解決することです。「支払いが必要」というシグナルを、自動的でシームレスなチェックアウト体験に変換します。

x402 が HTTP 402 とどのように連携するか

  1. リクエスト: クライアントが保護されたリソースをリクエストします。
  2. 402 レスポンス: サーバーがヘッダーに決済詳細を含めて 402 を返します。
  3. 決済: クライアントのウォレットが USDC 決済トランザクションに署名します。
  4. リトライ: クライアントがヘッダーに支払い証明を含めてリクエストを再送します。
  5. アクセス: サーバーが支払いを検証し、リソースを返します。

全行程は数秒で完了し、多くの場合ユーザーの介入は不要です。これは HTTP 402 が本来意図していたビジョンであり、現代の暗号資産インフラによってようやく実現されました。

x402 について詳しく知る →

アプリケーションへの HTTP 402 の実装

アプリケーションに 402 を実装したい開発者の方は、こちらのクイック概要をご覧ください。

サーバーサイド (402 を返す)

// Express.js の例
app.get('/premium-content', (req, res) => {
  if (!isPaid(req)) {
    return res.status(402).json({
      error: '支払いが必要です',
      price: '0.10',
      currency: 'USDC',
      paymentAddress: '0x...'
    });
  }
  res.json({ content: 'プレミアムコンテンツはこちら' });
});

クライアントサイド (402 の処理)

// JavaScript の例
const response = await fetch('/premium-content');
if (response.status === 402) {
  const paymentInfo = await response.json();
  // 決済フローをトリガー
  await processPayment(paymentInfo);
  // 支払い証明を持ってリトライ
  return fetch('/premium-content', {
    headers: { 'X-Payment-Proof': proof }
  });
}

HTTP 402 の未来

x402 のようなプロトコルにより、HTTP 402 の未来は明るいものです。

ウェブが本来持っていたネイティブ決済のビジョンがようやく現実のものとなりつつあり、HTTP 402 はその変革の中心にあります。

さらに詳しく

公式ドキュメント

背景と歴史

x402 プロトコル