HTTP/2の仕様、改定作業が始まる

[追記] 2021年10月時点の変更点について新しく記事を書きました
asnokaze.hatenablog.com

==

もくじ

HTTP/2の改定作業

HTTP/2の仕様は2015年に「RFC7540 Hypertext Transfer Protocol Version 2 (HTTP/2)」として標準化されています。

RFCは公開されたあとに、エラッタが見つかることがあります。このようなエラッタを修正するために、新しくRFCを出し直すということが行われます。

HTTP/2においてもいくつかのエラッタが公開されています (参考リンク)。そのため、それらを修正するためのたたき台として、MozillaのMartin Thomson氏によって改訂版の草案となる「http2bis」が提出されています。

Martin Thomson氏のたたき台は用語の修正とエラッタの修正のみが含まれていますが、IETF HTTP WGのメーリングリストでこの改定作業に含める修正ポイントについて議論が行われています(参照: Time to refresh HTTP/2?)

その議論になっている修正ポイントについて目を通していきます

(これらは議論中であることに注意してください。改訂版に必ず含まれるわけではありません。)

修正点

優先度制御について

HTTP/3の標準化の中で、HTTPにおける優先度制御について見直しがされています。そのため、HTTP/2におけるweightとdependencyを用いた優先制御をHTTP/2の仕様に残すかという議論が出ています。

もちろん、相互運用上問題にならないようにフレームのフィールド定義などは変更しないでしょうが、仕様としてどのような言及になるかは気になるところです。

新しい優先制御方式については以前書いたとおりです。
asnokaze.hatenablog.com

TLS1.3および0-RTT

HTTP/2の仕様はTLS1.3より以前に標準化されています。そのため、それらについて言及されていません。

同様に0-RTTについても言及がありません。0-RTT時のサーバSETINGSといったトピックや、RFC8470などへの言及が考えられます。

GREASEのコードポイントの予約

GREASEの予約について。GREASEは以前書いたとおり
asnokaze.hatenablog.com

疑似ヘッダの扱い

定義されていない疑似ヘッダの使用は禁止されていましたが、RFC 8441 WebSockets over HTTP2では :protocol という疑似ヘッダを追加しています。

あとから出たRFCで追加定義を行うことは、仕様上問題ではありませんが、新しく :protocolの使用を許可するか、禁止というのを緩和するかの判断余地があります。

RFC 8441は以前書いた通り
asnokaze.hatenablog.com

h2cの削除

2020/09/10 修正
TLSを利用しない平文のHTTP/2を削除

http/1.1からのupgradeメカニズムの議論
github.com


セマンティクス仕様への参照

HTTP/2の頃は、HTTPのセマンティクスとしてHTTP/1.1の仕様であるRFC 7231を参照していました。

現在、IETF HTTP WGでは、HTTP/1.1の仕様からHTTPのセマンティクスと、HTTP/1.1のフォーマットの仕様を分離し下記のように整理する作業を行っています。

HTTP/3のdraftではすでにHTTPのセマンティクス定義として上記を参照するような形になっていますが、HTTP/2の改訂版ではどうするか議論の余地があります。

そのた参照の更新

HTML5の仕様として下記をさんしょうしているので更新する

security considerations の追記

RFC発行後に見つかった実装上の脆弱性について、追記を行う。
例えば、CVE-2019-9511 ~ CVE-2019-9518 など

参考: https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-002.md