2022.03.09
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
HTTP / 3 は 2018 年にできた新しい Hypertext Transfer Protocol のメジャーバージョンです。
HTTP / 1、HTTP / 2、HTTP / 3 の変遷とともに HTTP / 3 を説明していきます。
HTTP とは
HTTP とはインターネット上で web クライアントと web サーバーがやり取りを行うために決められたルールである。
HTTP / 1 はそのルールのバージョン 1 ということです。
HTTP / 1
HTTP / 1 は正確に HTTP / 0.9、HTTP / 1.0、HTTP / 1.1 の三つのバージョンがあります。
HTTP / 1.1 は HTTP で最初に標準化されたバージョンで、1997 年に公開されました。HTTP / 2 が公開される 2015 年まで 18 年間にわたって活躍してきました。いまだに多くの昔からあるウェブサイトは HTTP / 1.1 を使用しています。例えばうちのライバルサイトも。
HTTP / 1.x では現在でも非常に親しみのある仕様の数々を確立してきました。GET、POST、PUT、DELETE メソッドや 200 OK、404 Not Found などのステータスコードはこの時期にすでに定義されています。
HTTP / 1.x では、ウェブサーバーに対して原則 1 つずつしかリクエストを送ることができません。そのため、先に遅いリクエストが送られるとそのリクエストが終わるまでほかのリクエストを送ることができなく、全体的にウェブサイトの表示が遅くなってしまうデメリットがありました。
時代が進むにつれて、ウェブサイトに表示する視覚メディアの量や、スクリプトの規模やサイズも増加したことによって、この問題がより鮮明になってきました。そのため、この問題を解決すべく、HTTP / 2 が生まれました。
HTTP / 2
HTTP / 2 は Google が開発したプロトコルである SPDY をもとに作成されました。SPDY が行った主な改善点として、
- 同じコネクションでリクエストを並行して扱うことが可能になった。
- ストリームに優先度、例えば HTML、CSS、JavaScript といったデータ種類に応じて優先度を付与することが可能になった。
- HTTP ヘッダーに圧縮を行うことでレイテンシを削減。
- サーバプッシュ機能。クライアントから HTTP リクエストが送信される前にレスポンスデータをクライアントに送付して、あらかじめクライアントにキャッシュを生成させておく機能。
これらによってウェブサイトの読み込み速度が大幅に改善されました。
意外と HTTP / 2 はまだまだ新しいプロトコルですが、依然と TCP ならではの 3 ウェイハンドシェイクなどで時間がかかる部分があり、常により多いデータ量、より高速で安全な通信を行うために、HTTP / 3 が考案されました。
HTTP / 3
HTTP / 1、HTTP / 2 とも TCP で通信をつなげていました。TCP とは、送ったデータが相手に届いたか、その都度確認しながら通信するやり方です。もし届いてなかったら再度データを送り、受信確認をします。
これはデータが確かに届けたと保証する一方で通信が遅くなります。その代わりに UDP というプロトコルがあります。UDP はデータの受信確認を行わない、言い換えればデータがロスしてもわからないし、再送処理を行わない。なのでとても高速な通信を可能とします。
データが確実に届くことより、リアルタイム性を必要としているサービス、例えば音声通話やストリーミングなどはこのプロトコルを利用します。
HTTP / 3 の元となる QUIC(こちらも Google が開発した)は HTTP 通信に UDP を採用しています。もちろん UDP はデータが届くことを保証しないので信頼性が欠けるため、 HTTP / 3 は TLS(SSL の最新規格)を必須としていて、TLS のハンドシェイクを利用して通信状態の確認しつつ、高速な通信を実現しています。