HTTP/2の設計自体に脆弱性が発見されました。。。

軽量で高速に処理できるということで、数年前から流行り始めたHTTP/2でしたが、残念ながらプロトコルそのものに脆弱性が見つかってしまいました。
HTTP/2 Rapid Reset という攻撃手法により、なんと1秒間に3億9800万リクエスト(!)もの通信を仕掛けて、サーバを落としてしまうというものです。

このサイトに詳しく書かれていますが、おおざっぱに説明すると以下のような感じです。
※間違っていたらご指摘ください...テスト勉強には上記のサイトを確認されることをお勧めします。ホントに(;゚▽゚)

HTTP/2は、雑に言うとSTREAMという単位で通信し、それを多重化することで効率よく通信しようとします(100個くらいのリクエストを多重化するので、1個1個やり取りするHTTP/1.1の100倍くらい効率がいいらしいです)。
で、このSTREAMをリセットするRST_STREAMというリクエストを投げると、サーバとクライアント間で何の調整もせずに、それまでのSTREAMを破棄します。
そして、サーバはクライアントからの新規リクエストを受け付ける状態になります。

通常の状態であれば、大きな問題にはならないかも知れませんが、これが大量のクライアントにより非常に短時間の間に繰り返して行われると、サーバがSTREAMを破棄してリソースを開放する前に、新たなリクエストを受け取ってしまう、ということが起きてしまいます。
こうなると、サーバにおいてSTREAMを破棄するための処理が、大量に積み重なっていくことになります。
結果、サーバのリソースが食いつぶされてしまい、最終的に落ちてしまう、ということになります。
これがHTTP/2 Rapid Resetです。たぶん(;゚▽゚)<スマン

この脆弱性が発見されたことにより、当サイトも実験的にHTTP/2を有効にしていましたが、無効化致しました。
一部のWebサーバでは、リソースの最大値制限することでこの問題を緩和しているようですが、そもそもプロトコル上の問題なので、スマートに解決できる問題ではなさそうだからです。
しょぼいサーバのうえ、旧来のHTTP/1.1に戻ってしまいましたので、アクセスがだいぶ遅くなってしまうかと思いますが、ご容赦ください...。

HTTP/2のプロトコルが見直されて、軽量で高速なWebサーバを構築できる日が、再び来ることを楽しみにしています。(´・ω・`)

※参考サイト