近年、汎用されているHTTP1.1の後継として、HTTP2は結構注目されています。HTTP2は、Webブラウジングの高速化と効率化を図ることが期待されています。そこで、本文では、HTTP2とは何かやHTTP2のメリットなどの基本情報を紹介した上、HTTP2にも対応可能なAPIクライアントツールのApidogを使って、HTTP2のリクエストをテストする方法を皆さんに紹介します。
HTTP2とは?
HTTP/2 は、HTTPネットワークプロトコルの2番目のメジャーバージョンとして、HTTP 1.1の後継として知られていることが多くなります。HTTP/2はInternet Engineering Task Force (IETF) によって開発され、2015 年 5 月に承認されました。HTTP/2 の主な目的は、待ち時間を短縮し、クライアントとサーバー間のデータ送信方法を最適化することで、Web サイトと Web アプリケーションのパフォーマンスを向上させることです。この目標を踏まえて、HTTP2は次のような特徴があります。
HTTP2の特徴
HTTP2の主な特徴は以下のようになります。
マルチプレクシング
サーバーとクライアント間で1つのTCPコネクションを共有し、複数のリクエストとレスポンスを同時に送受信できるようになりました。これにより接続数が減り、レイテンシーが改善されます。
ヘッダー圧縮
HTTPヘッダーを圧縮することで、転送データサイズが小さくなります。
サーバープッシュ
サーバーがクライアントが必要としそうなリソースを予めプッシュできるようになりました。キャッシュ機能が改善されます。
ストリームのプライオリティ制御
ストリームに優先度をつけることができるため、重要な通信を優先的に送信できます。
バイナリ形式
HTTP1.xはテキスト形式のプロトコルでしたが、HTTP2はバイナリ形式のプロトコルとなりました。処理効率が向上しています。
このように、HTTP2では接続効率、転送効率、キャッシュ効率が改善され、結果として通信速度が向上しています。Webアプリケーションの高速化に有効なプロトコルです。
HTTP2が普及されていないのはなぜか?
HTTP/2の採用が広がっていない理由は、次のような点が考えられます。
第一に、サーバーやブラウザのサポートが不十分なため、HTTP/2のメリットを引き出しづらいことが挙げられます。最新の製品では対応していても、旧いシステム環境ではサポートされていないケースが多く、実装に制限があるのが現状です。
第二に、ネットワーク遅延が小さな環境では、HTTP/2の効果がHTTP/1.1と比べてそれほど顕著ではないことも一因として考えられます。低遅延環境では導入インセンティブが低くなっている可能性があります。
第三に、HTTP/2への移行には一定の労力を要する複雑さが伴うため、組織によってはコスト対効果を慎重に判断し、導入をためらっているケースがあると思われます。
このような理由から、HTTP/2の採用が思ったほど進展していないのが実情だと考えられます。サポートの拡大や移行コストの低減が課題と言えそうです。
HTTP2とHTTP1.1の仕組み
HTTP/1.1と比べて、HTTP/2の仕組みには大きな変更があります。次は、主なHTTP2とHTTP1.1の仕組みにおける主な相違点を皆さんに紹介します。
接続方式が違う
- HTTP/1.1はリクエストごとにTCP接続を新規に開始する。
- HTTP/2は1つのTCP接続で複数のリクエストを多重化する。
メッセージ形式が違う
- HTTP/1.1はプレーンテキストのメッセージ。
- HTTP/2はバイナリ形式のフレームに分割。
ヘッダー処理が違う
- HTTP/1.1は非圧縮のプレーンテキストヘッダー。
- HTTP/2はヘッダー圧縮により転送データ量が削減。
順序が違う
- HTTP/1.1はメッセージの順序が保証される。
- HTTP/2のフレームは順不同で到着する可能性がある。
ブロッキングが違う
- HTTP/1.1はリクエストのブロッキングが発生する。
- HTTP/2のマルチプレクシングによりブロッキングが緩和される。
プッシュの有無が違う
- HTTP/1.1にサーバープッシュの概念がない。
- HTTP/2ではサーバーがクライアントにプッシュできる。
このように、HTTP/2はHTTP/1.1の欠点を改善する形で設計されていて、HTTP/1.1と比較して大幅にパフォーマンスが向上しているとも言えるのでしょう。
HTTP1.1とHTTP2とHTTP3の比較
ネットワーク上のデータ交換プロトコルの発展に伴って、HTTPというプロトコルは、HTTP3までも発展しています。HTTP1.1は一番汎用のプロトコルバージョンであるのが現状ですが、HTTP2とHTTP3もそれぞれの改善点とメリットがあると考えられています。
そこで、次は、HTTP1.1とHTTP2とHTTP3を完全に比較して、トランスポートプロトコル、多重化、バイナリフレーム化、ヘッダー圧縮、サーバープッシュ及び接続セットアップといった6つの方面から、三者の比較表を作成してみます。
テーブル⒈HTTP/1.1、HTTP/2、HTTP/3機能の比較
特徴 | HTTP/1.1 | HTTP/2 | HTTP/3 |
---|---|---|---|
トランスポートプロトコル | TCP | TCP | UDP over QUIC |
多重化 | なし | あり | あり(QUICにより効率的) |
バイナリフレーム化 | なし | あり | あり |
ヘッダー圧縮 | なし | あり | あり |
サーバープッシュ | なし | あり | 強化されている |
接続セットアップ | 1RTT | 多数のRTT | 最小のRTT (QUIC) |
このように、HTTPの各バージョンはパフォーマンスの向上を目指して順次改良されてきました。HTTP/2はHTTP/1.1から大きな進歩であり、HTTP/3はUDP上のQUICを利用することでさらなる最適化を図っています。
HTTP 2のAPIを簡単にテストできるApidog
現在、HTTP2は主流のプロトコルとは言えませんので、Postmanをはじめ、多くのAPIテストツールもHTTP2プロトコルをサポートしていません。それでは、もしHTTP2を採用しているAPIをテストするために、どうしたらいいですか?次は、Apidogというツールを使って簡単にHTTP 2のAPIをテストする方法を紹介します。
Apidogは、APIの設計、仕様書生成と共有、テスト及びAPIモックにも対応可能なAPIライフサイクリ管理ツールです。Apidogの最新バージョンでは、HTTP2プロトコルへのサポートが開始されました。これにより、Apidogを使用して、いつものHTTP APIのようにHTTP2のAPIを簡単にテストすることが可能です。
ステップ⒈Apidogを開き、リクエストを新規に作成します。
ステップ⒉Apple Push Notification Service(Appleプッシュ通知サービス)の「https://api.sandbox.push.apple.com/」をエンドポイントのURLを送信すると、エラーが発生されずレスポンスを成功に取得できます。
また、「設定タブ」に切り替えて、HTTP2に対応するかどうかを指定するために、HTTPとHTTPSの接続方式を選択することも可能です。
HTTPS接続方式の選択
HTTP/1.1
従来のようにHTTP/1.1という接続方式を選択すると、Apidogは、HTTP1.1及びそれ以前のプロトコルを採用するサーバーからレスポンスを取得できます。
HTTP/2 ALPN
HTTP/2 ALPNに切り替えると、ApidogはHTTP/2 ALPN(Application-Layer Protocol Negotiation)を使用して接続を確立します。まずはHTTP/2を使用して接続しますが、サーバーがHTTP/2をサポートしないことを検出した場合は、自動的にHTTP/1.1を使用します。こういう流れのおかげで、ApidogはAPIが利用しているHTTPプロトコルを自動的に判断できるので、いつものようにそうすれば、HTTP/2のAPIをテストしたりすることができます。
HTTP接続方式の選択
HTTP/1.1
HTTP接続方式をHTTP/1.1を指定すると、Apidogは、HTTP/1.1のみからレスポンスを取得できます。
HTTP/2 Prior Knowledge
HTTP接続はプレーンなTCP接続で行われるため、TLSハンドシェイク時に行われるALPNによるプロトコルネゴシエーションは利用できません。そこで、HTTP接続方式でHTTP/2を選択すると、Apidogは、HTTP/2を直接使用してh2c接続を確立します。サーバーがHTTP/2をサポートしていない場合は接続失敗になります。 HTTP/1.1は使用されません。
まとめ
HTTP/2は、HTTP/1.1の後継としてWebアプリケーションの高速化を図る次世代プロトコルです。
Apidogは、HTTP/2 APIのテストを簡単に実現するツールとして、HTTP/2対応サーバーとの接続をスムーズに処理します。この次世代プロトコルであるHTTP/2のAPIを手軽にテストできるため、Webアプリケーションの高速化を図る上で力を発揮するでしょう。