HTTP1.0とHTTP1.1は同じメッセージ形式をしていたので問題なかったが、HTTP2.0とHTTP1.xではメッセージの形式が異なるため通信を行えない。
そのため、どちらで通信するかネゴシエーションする必要がある。
httpbis wgでは幾つかの方法が提案されている
DNSのSRVレコードを用いる方法
SRVレコードはそのドメインで動作してるサービスとそのポートが書かれている。このレコードを参照してHTTP1.xかHTTP2.0を選択する。
この方法だとサーバ側では通信がどちらか知る手段がないので、HTTP1.xとHTTP2.0が別ポートになる...
下のレイヤーでネゴシエーションする(TLS-NPN)
SPDYで利用されている方法。同一ポートで複数のプロトコルから選択できる。
SSL通信を行う際のハンドシェイク時に拡張フィールドを用いてネゴシエーションを行う。
この方法だとSSL通信が必須になってしまう。
Alternate-Protocol ヘッダー
SDPYで提案されていた方法。HTTP1.xで最初に通信し、サーバ側から別途使用可能なプロトコルを通知する。