3. HTTP/2の開始 (Starting HTTP/2)
HTTP/2接続は、いくつかのメカニズムを通じて確立されます:
- "https" URIの場合: ALPN拡張を使用したTLS
- "http" URIの場合: HTTPアップグレードメカニズム
- 事前知識 (Prior Knowledge): ネゴシエーションなしの直接HTTP/2
3.1 HTTP/2バージョン識別 (HTTP/2 Version Identification)
HTTP/2は、TLSの場合はプロトコル識別子 (Protocol Identifier) "h2"を使用し、クリアテキストTCPの場合は"h2c"を使用します。
3.2 "http" URI用のHTTP/2の開始 (Starting HTTP/2 for "http" URIs)
クライアントは、"h2c"トークンとHTTP2-Settingsヘッダーフィールドを使用してHTTPアップグレードメカニズム (HTTP Upgrade Mechanism) を使用します。
3.3 "https" URI用のHTTP/2の開始 (Starting HTTP/2 for "https" URIs)
クライアントは、アプリケーション層プロトコルネゴシエーション (Application-Layer Protocol Negotiation, ALPN) 拡張を使用したTLSを使用します。
3.4 事前知識によるHTTP/2の開始 (Starting HTTP/2 with Prior Knowledge)
クライアントは、サーバーサポートの事前知識が存在する場合、HTTP/2フレームを直接送信してもよい (MAY) です。
3.5 HTTP/2接続プリフェース (HTTP/2 Connection Preface)
クライアントとサーバーの両方は、HTTP/2接続の確立時に接続プリフェース (Connection Preface) を送信しなければなりません (MUST)。
クライアントプリフェース: PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n の後にSETTINGSフレームが続きます。
サーバープリフェース: SETTINGSフレーム。