この記事は古くなっています。
2018/01/11 最新内容で書き直しましたのでそちらを参照のこと
asnokaze.hatenablog.com
HTTP/2では、一定の条件が満たされれば異なるオリジンとの通信を一つのコネクション上で行うことが出来ます。サーバは、クライアントが要求したオリジンに対する権威がない場合は421 (Misdirected Request)を返します。
(条件等は、rfc7540#section-9.1参照のこと)
このように、間違ったオリジンの要求は追加の待ち時間を生じさせます。それに対処するために、サーバが権威を持つオリジンを示すことができるように「ORIGINフレーム」を定義する「The ORIGIN HTTP/2 Frame」と言う仕様があります。
ORIGINフレーム
ORIGINフレームは、接続してるコネクション上で権威のあるオリジンは何かを示すことが出来ます。このORIGINフレームはクリティカルな拡張ではないので、サポートしてないエンドポイントには安全に無視されます。
この仕様をサポートするクライアントがORIGINフレームを受信し処理を行った後、クライアントはORIGINフレームに記述されていないオリジンへのリクエストはすべきではありません(SHOULD NOT)
ORIGINフレームはtypeは11であり、以下のフォーマットをしています
+-------------------------------+-------------------------------+ | Origin-Len (16) | Origin? (*) ... +-------------------------------+-------------------------------+
- Origin-Len: Originフィールドの長さを示す、非負の整数値
- Origin: 送信者がコネクション上で権威を持つオリジンを示す文字列
ORIGINフレームはストリームID 0で送信します。それ以外の場合は無視されます。
ORIGINフレームはフラグは定義しておらず、ただひとつのOrigin/Origin-Lenペアのみで構成されます。
ORIGINフレームは、ホップバイホップで処理されます。