HTTP/1.1は、一般的に使用されるHTTPのバージョンの1つである。

このバージョンでは、1.0の制限の多くを解決し、効率化と機能性を向上した。

特徴

1.0からは、以下の変更があった。

持続接続

HTTP/1.0ではリクエストごとにTCP接続を初期化してトランスミッション後にはそれを切断していたが、1.1ではKeep-Aliveがデフォルトで有効になった。

これにより、同じ接続で複数のリクエストを送信できるため、オーバーヘッドの削減と高速化が可能である。

パイプライン処理

持続接続のおかげで、一つのTCP接続で複数のリクエストを同時に送信可能となる。 ただし、レスポンス順序は固定されるため、後続が前の処理を待つ、Head-of-Line Blockingが発生しやすい。

HOSTの必須化

バーチャルホスト(一つのIPに複数のサイト)に対応できるようになった。

HOST: okayugroup.com

これは、HOSTヘッダによってサーバー側でリクエスト先の判別が可能になったからである。

  • Hostヘッダーフィールドの規定の追加
  • TLSサポート
  • Keep-Aliveのデフォルト化

キャッシュ制御

Cache-Control, ETag, If-Modified-Since など、HTTPキャッシュを制御するための細かいヘッダが導入された。

これによって、データの節約とレスポンスの高速化ができた。

メソッド

  • GET
  • POST
  • HEAD
  • PUT1
  • DELETE1
  • OPTIONS
  • TRACE
  • CONNECT

歴史

  • RFC 2068として1997年に初登場
  • RFC 2616(1999年)で改訂
  • RFC 7230~7235で2014年に仕様が再整理

現代でも一部古いウェブサイトで使用されている。Windows10のcurlではデフォルトでHTTP/1.1が使用されていたりする。

現在の標準は2であり既に古くなっているものだが、仕組みが単純なために組み込みアプリケーションでも使われることもある。

課題点

HTTP/1.1は多くの改善をもたらしたが、時代が進むにつれて以下のような課題も浮き彫りに:

  • Head-of-Line Blockingにより、同時通信の効率が低下。
  • 多数のTCP接続が必要なため、接続数の制限・ラウンドトリップ遅延が問題に。
  • バイナリではなくテキストベースのため、パースに時間がかかる。

これらの課題を解決するために、23が後継として登場した。

Footnotes

  1. HTTP/1.0で存在していたが、HTTP/1.1で正式に実装されたもの。 2