すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:クラウドネイティブゲートウェイでの HTTP/3 の有効化

最終更新日:Jun 22, 2026

HTTP/3 には、ヘッドオブラインブロッキング、コネクションマイグレーション、ゼロラウンドトリップタイム (0-RTT) という 3 つの主な機能があります。HTTP/3 は、複数のデバイスでネットワークを切り替えるシナリオや、ネットワーク接続が弱いシナリオに特に適しています。本トピックでは、クラウドネイティブゲートウェイで HTTP/3 を有効にして使用する方法について説明します。

前提条件

バージョン V1.2.15 以降の Microservices Engine (MSE) クラウドネイティブゲートウェイが作成されていること。詳細については、「MSE クラウドネイティブゲートウェイの作成」をご参照ください。

背景情報

HTTP/3 を使用するには、サービスが HTTP/3 をサポートし、リクエストされたトラフィックが HTTP/3 トラフィックであることを確認する必要があります。サービスを HTTP/3 に対応させるには、再構築が必要です。しかし、多くのお客様はサービスを変更しないことを好みます。このため、お客様はアクセスゲートウェイを使用して、使用中のプロトコルを HTTP/3 に変換できます。この方法は、プロセス全体で直接 HTTP/3 を使用する場合と比較して、リクエスト処理のパフォーマンスを大幅に向上させるものではありませんが、お客様に HTTP/3 のネットワーク上の利点をいくつか提供します。本トピックでは、この方法を使用して HTTP/3 を有効にする方法について説明します。

HTTP/1.1

HTTP/1.1 では、スペースで区切られたテキストフィールドを使用して HTTP メッセージを転送します。転送メッセージは読み取り可能です。ただし、スペースで区切られたメッセージ形式は、解析が複雑になり、さまざまな動作に対する許容範囲が過度に広くなります。HTTP/1.1 には多重化レイヤーが含まれていません。ほとんどの場合、複数の TCP 接続を使用してリクエストを並行して処理します。しかし、この実装は輻輳制御とネットワーク効率に悪影響を及ぼします。詳細については、「HTTP/1.1」をご参照ください。

HTTP/2

HTTP/2 は、バイナリフレーミングと多重化レイヤーを導入し、トランスポート層を変更することなくレイテンシーを削減します。しかし、TCP パケットの損失を回復する必要があるシナリオでは、HTTP/2 の多重化による同時実行機能は効果を発揮しません。パケットが失われたり、順序が入れ替わったりすると、パケット損失の影響を受けるかどうかに関わらず、すべてのアクティビティリクエストが一定期間中断されます。詳細については、「HTTP/2」をご参照ください。

HTTP/3

2022 年 6 月 6 日、IETF QUIC ワーキンググループおよび HTTP ワーキンググループのメンバーである Robin Marx 氏は、5 年間の努力の末、HTTP/3 が RFC 9114 で提案標準として公開されたと発表しました。詳細については、「HTTP/3 From A To Z: Core Concepts」および「RFC 9114」をご参照ください。

HTTP/3 は、以前は HTTP-over-QUIC と呼ばれていましたが、Google が長年の経験に基づいて開発した UDP ベースの QUIC プロトコルです。IETF は 2018 年に HTTP-over-QUIC を HTTP/3 に改名しました。Cloudflare、Google Chrome、Firefox Nightly が HTTP/3 をサポートしています。

HTTP/2 に存在するヘッドオブラインブロッキングの問題を修正するため、HTTP/3 はもはや TCP ベースではなく、UDP 上に構築されています。HTTP/3 では、ストリームを使用して HTTP/2 が提供する多重化機能をさらに拡張し、輻輳制御とヘッダー圧縮のパフォーマンスが向上しています。ヘッドオブラインブロッキングの詳細については、「ヘッドオブラインブロッキング」をご参照ください。

フローチャート

image

操作手順

MSE コンソールでの HTTP/3 の有効化

  1. クラウドネイティブゲートウェイで HTTP/3 を有効にします。

    1. MSE コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。

    2. 左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

    3. 左側のナビゲーションペインで、[パラメーターの設定] をクリックします。

    4. [Gateway Engine Parameters] セクションで、EnableHttp3 パラメーターを見つけ、[Actions] 列の [Edit] をクリックします。

    5. [Modify Parameters] ダイアログボックスで、[Value] スイッチをオンにし、[OK] をクリックします。

  2. ゲートウェイのドメイン名にプロトコルとして HTTPS が設定されているかどうかを確認します。

    HTTP/3 はセキュリティのために HTTPS を必要とします。ゲートウェイ上のテストドメインで HTTPS を有効にする必要があります。詳細については、「ドメイン名の作成」をご参照ください。左側のナビゲーションペインで、Domain Name Management をクリックします。ドメインリストで、対象ドメインの Protocol 列に HTTPS と関連付けられた証明書 (例: 8880972-cn-hangzhou) が表示されていることを確認します。

    説明

    ゲートウェイに HTTPS ドメイン名が設定されている場合、[Overview] ページでゲートウェイに関連付けられている Classic Load Balancer (CLB) インスタンスの名前をクリックできます。CLB コンソールに移動し、CLB インスタンスのリスナーポート 443 の [ヘルスチェックのステータス]が正常であることを確認します。

  3. ゲートウェイに HTTP サービスを追加し、ルーティングルールを追加します。

    1. HTTP/1.1 をサポートするバックエンドテストサービスを追加します。詳細については、「サービスの追加」および「サービスソースの追加」をご参照ください。

    2. テストサービス用のルーティングルールを追加します。詳細については、「ルーティングルールの作成」をご参照ください。

      たとえば、quic という名前のルーティングルールを追加します。

      このルールは公開され、/quic の完全パス一致を使用し、ドメイン api.alibaba-inc.com に関連付けられ、single service をターゲットとします。

    3. 次の cURL コマンドを実行して、HTTP/3 リクエストテストを開始します:

      curl --http3 https://api.alibaba-inc.com/quic --resolve api.alibaba-inc.com:443:<CLB インスタンスの IP アドレス> -k
      説明

      HTTP/3 テストを実行するには、ソースコードをコンパイルする必要があります。既存の cURL HTTP/3 イメージをテストに使用する場合、ソースコードをコンパイルする必要はありません。ビジネス要件に基づいてテスト方法を選択できます。詳細については、「curl-http3」をご参照ください。

Ingress を使用した HTTP/3 の有効化

  1. クラウドネイティブゲートウェイで HTTP/3 を有効にします。

    1. MSE コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。

    2. 左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

    3. 左側のナビゲーションペインで、[パラメーターの設定] をクリックします。

    4. [Gateway Engine Parameters] セクションで、EnableHttp3 パラメーターを見つけ、[Actions] 列の [Edit] をクリックします。

    5. [Modify Parameters] ダイアログボックスで、[Value] スイッチをオンにし、[OK] をクリックします。

  2. Container Service for Kubernetes (ACK) クラスターに MSE Ingress Controller をインストールし、ゲートウェイを MSE Ingress Controller に関連付けます。

  3. ACK クラスターで Ingress を設定します。

    ACK クラスターで HTTPS ドメイン名用の HTTPS Secret とルーティングルールを作成します。サンプルコード:

    apiVersion: v1
    kind: Secret
    metadata:
      name: testsecret-tls
      namespace: default
    data:
      tls.crt: base64 # Base64 でエンコードされた証明書。 
      tls.key: base64 # Base64 でエンコードされたプライベートキー。 
    type: kubernetes.io/tls
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tls-example-ingress
      annotations:
        nginx.ingress.kubernetes.io/backend-protocol: HTTP # バックエンドサービスが HTTP/2 を使用している場合は、このパラメーターを HTTP2 に設定します。 
    spec:
      tls:
      - hosts:
          - https-example.foo.com
        secretName: testsecret-tls
      rules:
      - host: https-example.foo.com
        http:
          paths:
          - path: /quic
            pathType: Prefix
            backend:
              service:
                name: service1  # バックエンドサービス。
                port:
                  number: 80
  4. 次の cURL コマンドを実行して、HTTP/3 リクエストテストを開始します:

    curl --http3 https://https-example.foo.com/quic --resolve https-example.foo.com:443:<CLB インスタンスの IP アドレス> -k