序章HTTPプロトコルは、Webを構成する重要な要素の1つです。HTTP自体は、1997年にHTTP/1.1が導入されて以来、20年近く変更されることはありませんでした。HTTPの実装方法に大きな設計変更があったのは、HTTP/2の導入が行われた2015年まででした。HTTP/2は、主にプロトコルのトランスポートレベルで変更を導入するよう設計されていました。これらのプロトコルの変更は、その動作が重要である一方で、バージョン間の後方互換性をまだ可能にしていました。今年もまた、HTTP/2を詳しく見て、その主要な機能のいくつかを議論します。HTTP/2の利点のいくつかと、なぜそれがウェブパフォーマンスコミュニティ全体で大きく採用されているのかを見ていきます。HTTP/2は接続制限、より優れたヘッダー圧縮、より優れたペイロードのカプセル化を可能にするバイナリサポートなどHTTPの多くの問題の解決を目指したが、提示されたすべての機能がその設計で成功したわけではなかった。HTTP/2が野放しになって数年、HTTP/2の意図のいくつかはまだ実現されていない。昨年、私たちは、HTTP/2プッシュに別れを告げるかどうかという問いを提起しました。今年は、2021年のデータを見ることで、より確信を持ってこの問いに答えることを目指しています。これらの欠点が明らかになるにつれて、HTTPの次のイテレーションであるHTTP/3で対処されたり省略されたりしています。過去1年間のHTTP/3のサポートの増加は、ウェブでのHTTP/3の採用について内省することを可能にしました。この章では、HTTP/3のコア機能のいくつかと、それぞれの利点を詳しく見ていきます。HTTP/3の進化をサポートしている主要なベンダーと、HTTP/3の継続的な批評のいくつかを検証します。AlmanacがHTTPの章を通して回答しようとするデータポイントには、HTTPバージョン間の採用状況、主要ソフトウェアベンダーやCDN企業のサポート、ファーストパーティとサードパーティのこの分布が採用にどのように影響するかが含まれます。接続、サーバープッシュ、レスポンスデータサイズなどのHTTP属性に関する指標を含め、ウェブ上のトップランカーサイトにおける使用状況も見ています。これらのデータは、2021年のウェブ上でのHTTPの使用状況や、主要なバージョン間でのプロトコルの進化についてのスナップショットを提供します。今後数年間の主要な機能の採用について洞察を提供します。HTTP/2を紹介して以来6年が経ちますが、そもそもHTTP/2に至った経緯について理解する価値があるでしょう。0.9を紹介されました。HTTPは、機能が制限されていた0.9からは大きく進歩しました。0.9は、GETメソッドのみをサポートし、ヘッダーやステータスコードをサポートしない、1行のプロトコル転送に使用されていました。回答はハイパーテキストで提供されるだけだった。5年後、これはHTTP/1.0で強化されました。メソッドなど、現在私たちが知っているほとんどのプロトコルが含まれています。1.0で対処できなかった問題は、応答を受け取った後すぐに接続が終了してしまうことでした。リクエストごとに新しいコネクションを開き、TCPハンドシェイクを行い、データを受け取った後にコネクションを閉じる必要があったのです。この大きな非効率性から、わずか1年後の1997年にHTTP/1.1が導入され、一度開いたコネクションを再利用できる持続的なコネクションが可能になりました。このバージョンは、2015年まで何の変更も加えられることなく、18年間その目的を果たしました。いう、HTTPメッセージの送信方法を完全に作り直す実験を行いました。これは最終的にHTTP/2で正式化されました。HTTP/2は、Web開発者がパフォーマンスの向上を図る際に直面していた問題の多くに対処することを目的としています。HTTP/1.1の非効率性を回避するためには、ドメインシャード、アセットスプリング、ファイルの連結といった複雑な処理が必要でした。け、ヘッダー圧縮を導入することで、HTTP/2はプロトコルレベルでネットワークの最適化を提供するように設計されています。ような機能によって、新しいパフォーマンスの最適化の可能性を導入しました。画像を見る図24.1の説明を表示ページロードで使用されるHTTPバージョンを示す棒グラフ。デスクトップサイトの59.5%がHTTP/2+を、モバイルサイトの59.4%がHTTP/2+を使用しています。それぞれ39.6%、39.8%がHTTP/1.1を使用しています。ページロードで使用されるHTTPのバージョン。HTTPバージョン0.9から30年の間に、プロトコルの採用状況に変化がありました。0.9を使用した例は1つだけで、1.0を使用しているページはわずか数千件であることを発見しました。40%のページがバージョン1.1を使用しており、残りの60%はHTTP/2以上を使用しています。このように、HTTP/2の採用率は、2020年に同じ分析を行ったときよりも10%増加しています。後述するように、HTTP/3の動作方法と、毎回新鮮なインスタンスでクロールが動作する方法のため、HTTP/3は最初のページリクエスト、あるいはその後のリクエストに使用される可能性は低いです。そのため、本章ではいくつかの統計情報を「HTTP/2+」として報告し、現実世界でHTTP/2またはHTTP/3が使用される可能性があることを示す。私たちは、この章の後半で、(私たちのクロールで使用されていないとしても)実際にどの程度HTTP/3がサポートされているのかを調査します。最初のページへのリクエストは、他の多くのリクエストによって補完されます。多くの場合、サードパーティによって提供され、異なる、あるいはより優れたプロトコルサポートを持っているかもしれません。このため、最初のページだけでなく、リクエストのレベルで見ると、使用率が非常に高くなることが過去数年間わかっており、今年もその傾向が見られます。画像を見る図24.2の説明を表示リクエストで使用されたHTTPバージョンを示す棒グラフ。モバイルのリクエストの73.2%がHTTP/2を使用しているのに対し、26.5%はまだHTTP/1.1を使用しており、0.3%が未知、HTTP/0.9とHTTP/1.0はどちらも小さいため0%としてグラフ化されています。デスクトップの使用率は同じようです。リクエストで使用されたHTTPのバージョン。Archiveのデータは、HTTP/0.9とHTTP/1.0が事実上すべて消滅したことを示唆しています。0.9には数百のリクエストが存在しましたが、データセット全体で集計するとゼロに切り捨てられます。HTTP/1.0は数千のリクエストがありますが、これも全体の0.02%に過ぎません。昨年度のHTTP/1.1リクエストの減少。興味深いことに、4分の1以上のリクエストは依然としてHTTP/1.1経由で提供されています。2020年と比較すると、これは25%減少していることになります。70%以上のリクエストがHTTP/2以上で処理されており、HTTP/2とHTTP/3がWebの支配的なプロトコルバージョンであることを示唆しています。ページごとに使用されているプロトコルを見ると、やはりHTTP/2以上の優位性がプロットされます。画像を見る図24.4の説明を表示HTTP/2+リソースの使用率をパーセンタイルで示した折れ線グラフ。HTTP/2+リソースのパーセンタイル別利用状況。サイトのリソースがHTTP/2以上で読み込まれています。別の言い方をすれば、30%のサイトがHTTP/1.1のリソースをまったく使用していないことになります。画像を見る図24.5の説明を表示サードパーティリソースのHTTP/2+の利用状況を示す棒グラフ。40パーセンタイルを超えると、100%のリソースがHTTP/2+を使用しています。サードパーティのリソースにHTTP/2+を使用する。サードパーティコンテンツによるHTTP/2の採用は非常に偏っており、サードパーティのリクエストの40パーセンタイルを超えると、100%のトラフィックがHTTP/2で提供されるようになります。実際、10パーセンタイルでも、66%以上のリクエストがHTTP/2を活用しています。このことから、導入の大半はまだサードパーティコンテンツとCDNを活用したドメインが提供するコンテンツに影響されていることがわかります。よると、全世界で97%のブラウザがHTTP/2をサポートしているとのことです。HTTPSは、HTTP/2対応のためにブラウザが要求しているもので、従来はブロックされていた可能性があります。デスクトップで93%、モバイルでは91%のサイトがHTTPSに対応しています。これは、2020年に昨年より5%増加し、2019年から2020年にかけては前年比6%増加しました。HTTPSの導入はもはやブロッカーではない。ブラウザ間での高い普及率とHTTPSの高い普及率から、HTTP/2のさらなる普及を制限する要因は、まだサーバーの実装に大きく左右されることを理解することが重要です。HTTP/2の利用が急速に増加しているにもかかわらず、ウェブサーバ別に分けた場合、採用の数値はより断片的なストーリーを示しています。上位サーバーとHTTP/2+で提供されたページの割合を示す積み上げ棒グラフ。29.9%、そしてSquarespaceは89.1%。上位サーバーとHTTP/2+で提供されたページの割合。HTTPサーバーを使用しているサイトでは、HTTP/2にアップグレードしている可能性は低く、新しいプロトコルを活用しているApacheサーバーはわずか3分の1に過ぎません。Nginxは、全サーバーの3分の2がHTTP/2にアップグレードしており、より有望な数字を示しています。CDNとクラウドサーバーは、Cloudfront、Cloudflare、Netlify、S3、Flywheel、Vercelなどのサービスから、いずれも高い採用率を誇っています。CaddyやIstio-Envoyのようなニッチなサーバ実装も、高い採用率を示しています。Server(ATS)などの実装はいずれも採用率が低く、Scuriも採用率はほぼゼロと報告されています。画像を見る図24.7の説明を表示HTTP/2+を利用していないサイトが利用しているサーバーソフトを棒グラフで示したもの。CoyoteとSquaresapceは0.1%となります。デスクトップ利用も似たような感じです。HTTP/2+を使用していないサイトが使用するサーバーソフト。実際、HTTP/1.1レスポンスを報告している全サーバーのうち、もっとも多いのはApacheサーバーで20%でした。Apacheはウェブ上でもっとも普及しているウェブサーバーの1つであるため、古いApacheによってウェブが新しいプロトコルを全面的に採用するのを妨げている可能性があることを示唆しています。CDNによる採用CDNは、HTTP/2のような新しいプロトコルの採用を推進する上で極めて重要な役割を果たすことが多く、統計データを見れば、このことが証明されます。画像を見る図24.8の説明を表示CDNによるHTTP/2+とHTTP/1.1の採用状況を示す棒グラフ。CDNがない場合、HTTP/2+を使用するサイトは49%にとどまります。CDNについては、採用率はまちまちですが、すべてCDNなしの値を上回っています。上位CDNとHTTP/2+で提供されるページの割合。大多数のCDNは、HTTP/2搭載サイトの採用率が70%以上であり、非CDNトラフィックの49.1%よりはるかに高い。Compress、jsDeliverなどの一部のCDNは、すべてHTTP/2の採用率が100%となっています!採用率の高いサービスは、広告ネットワーク、分析、コンテンツプロバイダー、タグマネージャー、ソーシャルメディアサービスなどの周辺サービスが典型的です。これらのサービスにおけるHTTP/2の採用率の高さは、少なくとも50%がHTTP/2を有効にしている5%台以上でも明らかです。中央値では、これらのサービスの95%がHTTP/2を使用することになります。画像を見る図24.9の説明を表示ランキング別のトップページでのHTTP/2+の利用状況を示す棒グラフ。モバイルの上位1,000サイトの82.3%がHTTP/2+を使用しており、上位10,000サイトでは76.8%、上位10万サイトは67.0%、上位100万サイトでは61.5%、すべてのサイトでは59.4%となっていることがわかります。デスクトップの数字も似たようなものです。ランキング別のトップページでのHTTP/2+の利用状況。ArchiveにおけるサイトのページランクとHTTP/2への対応には直接的な相関があります。トップ1,000に掲載されているサイトの82%がHTTP/2を有効にしています。上位1万サイトでは76%以上、次いで上位10万サイトで66%、そして上位100万サイトは少なくとも60%がHTTP/2を有効にしていることになります。このことは、ランキング上位のサイトが、提供されるセキュリティとパフォーマンスの利点を求めてHTTP/2を有効にしていることを示唆しています。ランキング上位のサイトほど、HTTP/2を有効にしている可能性が高くなります。HTTP/2をもう少し深く掘り下げるHTTP/2の主な利点の1つは、テキストベースのプロトコルの代わりにバイナリであることです。構成されることがあります。これは、クライアントとサーバーの間の仕組みを変えます。メッセージをフレームにチャンキングし、それらのフレームをワイヤ上でインターリーブすることで、1つのTCPコネクションで複数のメッセージを送受信できます。これにより、ドメインハックやその他のHTTP/1.1パフォーマンスの回避策が不要になります。このまったく新しいHTTPトラフィックの送信方法は、HTTP/2が以前のバージョンと互換性がないことを意味するため、クライアントとサーバーはそれぞれHTTP/2を話していることを知る必要があります。HTTPSは、HTTP/2のデファクトスタンダードとして採用されています。HTTP/2はHTTPSなしでも実装できますが、すべての主要なブラウザベンダーは、HTTP/2がHTTPS上で使用されることを保証しています。HTTP/2はALPNを使用しており、最初の接続時にプロトコルを特定できるため、より高速な暗号化接続が可能になります。プロトコル間の切り替えHTTPSの使用は、HTTP/1.1とより新しいHTTP/2のどちらを「話す」かを決めるのに役立ちますが、より新しいプロトコルに切り替える方法は他にもあります。応答ステータスコードを使って切り替えを行うことが可能です。ヘッダーが使用されますが、これについては本章で後ほど説明します。Archiveのデータによると、Upgradeヘッダーの使用は、しばしば誤用されたり、正しく設定されなかったりすることがあるようです。Upgradeヘッダーを提供しているサイトはごく一部です。このヘッダーを報告しています。オプションとして提供しているサイトがあり、0.08%となっています。Upgradeは、リクエストが行われた既存のHTTP/1.1接続以外の、互換性のない、またはより適切なプロトコルを通知するために使用されるべきものだからです。オプションとして不正確に報告しています。画像を見る図24.10の説明を表示HTTP/2接続で送信されたアップグレードヘッダーを示す棒グラフ。h2,h2cがもっとも多く、デスクトップでは2,18、モバイルでは2,595となっています。1,373、h2cは148のデスクトップサイトでモバイルサイトはない。HTTP/2コネクションで送信されるヘッダーをアップグレードする。心配なのは、HTTP/2接続をHTTP/2に「アップグレード」することを提案するサイトの数です。これは明らかなエラーであり、HTTP/2の初期にはブラウザを混乱させるために使用されました。約12万件のモバイルサイトがHTTPで発見されましたが、HTTP/2へのUpgradeヘッダーが報告されています。良い方法は、HTTPからHTTPSへのリダイレクトを発行し、安全な接続で直接HTTP/2を活用することです。モバイルサイトがHTTP/2をサポートしていないにもかかわらず、サポートしていると主張すること。デスクトップとモバイルでそれぞれ22,000と26,000のWebページがHTTPSでありながらHTTP/2をサポートしていないことが判明しました。同様に、数百のウェブページで、接続自体がすでにHTTP/2であるにもかかわらず、HTTP/2にアップグレードするよう誤ったシグナルが表示されていました。接続台数HTTP/2の導入以降、1ページあたりのTCP接続数の中央値は着実に減少しています。画像を見る図24.12の説明を表示ホームページのHTTPバージョン別のTCP接続を示す棒グラフ。HTTP.1.1ではデスクトップとモバイルで16、HTTPS/2+ではデスクトップとモバイルで13と12。ホームページのHTTPバージョン別のTCPコネクション。本稿執筆時点では、デスクトップ接続数は12か月間で44%減の16接続(中央値)。モバイルは7%減で、接続数の中央値は12です。これは、2020年以降にHTTP/2の採用が急増したため、時間の経過とともに接続数が減少していることを表しています。画像を見る図24.13の説明を表示HTTPバージョンごとのTCP接続数をパーセンタイルで示した棒グラフ。10パーセンタイルではHTTP/1.1が6、HTTP/2+が4、25パーセンタイルでは10と7、50パーセンタイルでは16と12、7番目では24と20、90パーセンタイルでは40と33になっています。HTTPバージョンごとのTCPコネクション数(パーセンタイル別)。Archiveのデータによると、HTTP/1.1サイトの中央値は、1ページあたり16コネクションになります。75パーセンタイルでは24コネクションになります。モバイルとデスクトップでは、90パーセンタイルで40と2倍以上になります。HTTP/2サイトでは、中央値で12、75パーセンタイルで21、90パーセンタイルで33の接続が発生します。トップエンドでも、ウェブサイト全体で使用される接続数が21%減少していることになります。TLSはパフォーマンスに若干のオーバーヘッドを追加し、HTTPS上のHTTP/2の事実上の実装では、使用するTLSのバージョンによってパフォーマンスの考慮が必要であることを意味します。パフォーマンスへの配慮が追加され、クライアントが最初のTLSラウンドトリップ後に直ちに暗号化データの送信を開始できるような仕組みが導入されています。同様に、TLSハンドシェイクを改善するためにゼロラウンドトリップタイム(0-RTT)を実現しました。1.2ではTLSハンドシェイクを完了するために2回のラウンドトリップが必要ですが、1.3では1回で済むため、暗号化の待ち時間が半分に短縮されます。画像を見る図24.14の説明を表示ページのHTTPバージョン別に使用されるTLSバージョンを示す棒グラフ。HTTP/2はTLSv1.3をもっとも多く使用しており、全ページの48.51%に及んでいます。1.2への依存がもっとも多い。ページのHTTPバージョンで使用されるTLSバージョン。1.3を使用しており、残りの10%は不明(接続に失敗したHTTPSサイトなど)です。1.3、9%が不明となっています。スを向上させることができます。ヘッダーの削減HTTP/2で提唱されたもう1つの機能は、ヘッダーの圧縮です。HTTP/1.1は、多くの重複した、または繰り返されるHTTPヘッダーが電線で送信されていることを証明しました。これらのヘッダーは、クッキーを扱うときにとくに大きくなることがあります。このオーバーヘッドを減らすために、HTTP/2はHPACK圧縮形式を利用して、送受信するヘッダーのサイズを小さくしています。クライアントとサーバーの両方が、よく使われるヘッダーや以前に転送したヘッダーのインデックスをルックアップテーブルに保持し、個々の値を前後に送信するのではなく、テーブル内のそれらの値のインデックスを参照できます。これにより、電線で送信されるバイト数を節約できます。画像を見る図24.15の説明を表示もっとも普及しているHTTPレスポンスヘッダーを示す棒グラフです。Date、Content-Type、Serverはもっとも普及しているヘッダーです。普及しているHTTPレスポンスヘッダー。受信したレスポンスヘッダーの中で、もっとも多いヘッダーは上位5つです。