Go WebサーバーにおけるモダンHTTPプロトコルの採用:HTTP/2の有効化と実験的なHTTP/3の探求
Takashi Yamamoto
Infrastructure Engineer · Leapcell

はじめに
Web開発の進化し続ける状況において、サーバーのパフォーマンスとユーザーエクスペリエンスの最適化は、依然として最重要課題です。これら両方に大きく貢献する要因は、クライアントとサーバー間の通信に使用される基盤となるプロトコルです。長年、HTTP/1.1はうまく機能してきましたが、そのシーケンシャルなリクエスト・レスポンスモデルは、固有のボトルネックをもたらしました。HTTP/2の登場は、マルチプレキシング、ヘッダー圧縮、サーバープッシュを通じて、前任者の多くの制限に対処する革新的な改善をもたらしました。最近では、UDPベースのQUICプロトコル上に構築されたHTTP/3が、特にヘッド・オブ・ライン・ブロッキングの削減、あるいは排除、そしてモバイルや損失しやすいネットワーク環境での接続確立時間の改善において、さらなる進歩を約束しています。
高性能なWebサービスを構築する <span>Go</span> 開発者</span></span></span><span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>,</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span>;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span>;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span>, </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>"</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></u></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span>%</span></span></span></span>%,</span></span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span></span></span>%</span></span></span>;</span></span></span>, </span>%</span></span>;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span>9999999999999</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span></span>%</span></span></span>;</span></span>%</span></span>%</span></span></span>%</span></span>;</span></span>%</span></span>%</span></span></span>%</span></span>;</span></span>%</span></span>%</span></span></span>%</span></span>;</span></span>%</span></span>%</span></span></span>%</span></span>;</span></span>%</span></span>%</span></span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span>%</span></span></span></span></span></span></span></span></span></span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>"</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>%</span></span></span>%</span></span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;</span></span>%</span></span>%</span></span>%</span></span>;
-
HTTP/1.1: Webの基盤となるプロトコルで、「1リクエスト、1レスポンス」モデルが特徴です。パイプライン処理は存在しましたが、ヘッド・オブ・ライン・ブロッキング(HOLB)に悩まされており、低速なレスポンスが、準備ができている他のレスポンスでさえ遅延させる可能性がありました。接続は数回の後には閉じられることが多く、頻繁なTCPハンドシェイクによるオーバーヘッドが発生していました。
-
HTTP/2: このプロトコルは、主に以下の方法でHTTP/1.1の欠点に対処しています。
- マルチプレキシング: 単一のTCP接続上で複数のリクエストとレスポンスをインターリーブすることを可能にします。これにより、リクエストは順序外で処理および応答できるため、アプリケーションレイヤーでのHOLBが解消されます。
- ヘッダー圧縮 (HPACK): 共有される動的および静的テーブルを使用することで、HTTPヘッダーのサイズを削減します。HTTPヘッダーはしばしば冗長です。
- サーバープッシュ: サーバーが、クライアントが明示的に要求しなくても、クライアントが必要と知っているリソースをプロアクティブに送信することを可能にします。これにより、クライアントのリクエストを先読みしてレイテンシーを削減できます。
- ストリーム優先度: クライアントは、どのストリームがより重要であるかをサーバーに信号で伝えることができ、サーバーはリソースをより効果的に割り当てることができます。
- バイナリフレーミングレイヤー: HTTP/2はバイナリプロトコルであり、HTTP/1.1のテキストベースのフォーマットよりも解析が効率的で、エラーが発生しにくくなっています。
- TLS要件: 仕様で厳密に義務付けられていませんが、ほとんどのブラウザはTLS(HTTPS)経由のHTTP/2のみをサポートしています。
-
HTTP/3: HTTPの最新のメジャーバージョンであり、HTTP/2がいまだに依存しているTCPに内在する問題を解決するように設計されています。その主なイノベーションは次のとおりです。
- QUIC (Quick UDP Internet Connections): HTTP/3は、TCPの代わりにQUICを基盤となるトランスポートプロトコルとして使用します。QUICはUDP上で動作し、いくつかの利点を提供します。
- ストリームごとの輻輳制御: QUICでは、接続内の個々のストリームが独自の輻輳制御メカニズムを持っています。これにより、トランスポートレイヤーでのヘッド・オブ・ライン・ブロッキングが効果的に排除され、1つのストリームでのパケットロスが他のストリームの進行をブロックすることはありません。TCPベースのHTTP/2では、1つのパケットロスがすべての同時ストリームを停止させる可能性がありました。
- 接続セットアップレイテンシーの削減: QUICは、安全な接続をより迅速に確立できます。多くの場合、同じサーバーへの後続接続では0-RTT(ゼロラウンドトリップタイム)で、TCPの3ウェイハンドシェイクやTLSの追加ハンドシェイクと比較して、レイテンシーが大幅に削減されます。
- 接続マイグレーション: QUIC接続は、IPアドレスまたはポートではなく、接続IDによって識別されます。これにより、クライアントは接続をドロップすることなく、ネットワーク変更(例:Wi-Fiからセルラーへ)をシームレスに移行できます。これはモバイルユーザーにとって大きな恩恵となります。
- 統合TLS 1.3: QUICはTLS 1.3暗号化をプロトコルに直接組み込むことを義務付けており、デフォルトで強力なセキュリティを提供します。
Go WebサーバーでのHTTP/2の有効化
Goの net/http
パッケージは、HTTP/2の優れた組み込みサポートを備えており、有効化が驚くほど簡単です。実際、http.ListenAndServeTLS
または server.ServeTLS
を使用してHTTPSトラフィックを提供している場合、クライアントもサポートしていれば、HTTP/2はデフォルトで自動的にネゴシエートされ、有効になります。
簡単な <span>Go</span> Webサーバーで例を示します。
package main import ( "fmt" "log" "net/http" ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, world from %s!", r.Proto) } func main() { http.HandleFunc("/", helloHandler) // 現実世界のシナリオでは、「server.crt」と「server.key」を // 実際のTLS証明書と秘密鍵に置き換えてください。 // テスト用に自己署名証明書を生成できます。 // go run $(go env GOROOT)/src/crypto/tls/generate_cert.go --host 127.0.0.1 certFile := "server.crt" keyFile := "server.key" log.Println("Server starting on https://localhost:8080") // ListenAndServeTLSが成功した場合、サポートされているクライアントに対してHTTP/2が自動的に有効になります。 if err := http.ListenAndServeTLS(":8080", certFile, keyFile, nil); err != nil { log.Fatalf("Server failed to start: %v", err) } }
この例を実行するには、TLS証明書と秘密鍵が必要です。テストのため、<span>Go</span> は自己署名証明書を生成するユーティリティを提供しています。
go run $(go env GOROOT)/src/crypto/tls/generate_cert.go --host 127.0.0.1
これにより、現在のディレクトリに cert.pem
と key.pem
ファイルが作成されます。これらを server.crt
と server.key
にそれぞれ名前を変更する(またはコードを更新する)必要があります。
最新のブラウザで https://localhost:8080
にアクセスすると、ブラウザはおそらくHTTP/2接続をネゴシエートします。開発者ツール(例:Chromeでは、Networkタブに移動し、「Protocol」列を確認する)を使用してこれを確認できます。出力は、HTTP/2に対して h2
を表示するはずです。
明示的なHTTP/2構成(一般的ではないが、特定のシナリオで役立つ):
ListenAndServeTLS
はHTTP/2を自動的に処理しますが、http.Server
インスタンスを手動で構成することもできます。これは、サーバーの動作をより細かく制御する必要がある場合や、より複雑なセットアップに統合する場合に便利です。
package main import ( "fmt" "log" "net/http" "time" "golang.org/x/net/http2" // HTTP/2構成のための明示的なインポート "golang.org/x/net/http2/h2c" // 必要に応じてHTTP/2クリアテキスト(h2c)用 ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, world from %s! (via custom server)", r.Proto) } func main() { mux := http.NewServeMux() mux.HandleFunc("/", helloHandler) server := &http.Server{ Addr: ":8080", Handler: mux, ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, IdleTimeout: 120 * time.Second, // より詳細な制御のために、ここにTLSConfigを定義することもできます // TLSConfig: &tls.Config{ ... }, } // サーバーにHTTP/2を有効にする。これはListenAndServeTLSによって自動的に行われますが、 // カスタムサーバー構成では明示的に行うことができます。 // HTTPSの場合、`ServeTLS` が使用されていれば、ここの追加構成は厳密には不要です。 // `http2.ConfigureServer` は主にH2C(HTTP/2クリアテキスト)または非常に特定のセットアップ用です。 // `ServeTLS` を使用する場合、`net/http` パッケージがALPNネゴシエーションを処理します。 // http2.ConfigureServer(server, nil) // 通常、標準のHTTPS+HTTP/2では不要です certFile := "server.crt" keyFile := "server.key" log.Println("Custom Server starting on https://localhost:8080") if err := server.ListenAndServeTLS(certFile, keyFile); err != nil { log.Fatalf("Custom Server failed to start: %v", err) } }
重要なのは、ほとんどの標準 <span>Go</span> WebサーバーでHTTPSを提供する場合、HTTP/2はすぐに利用できるということです。
Goでの実験的なHTTP/3サポートの探求
<span>Go</span> でのHTTP/3サポートはまだ開発中であり、実験的と見なされています。QUICへの依存と、QUIC自体が比較的新しく進化中のプロトコルであるという事実から、標準の net/http
パッケージには直接含まれていません。しかし、<span>Go</span> コミュニティ、特に quic-go
プロジェクトは、QUICとHTTP/3のプロダクション対応実装を提供しています。
実験的なHTTP/3サポートを有効にするには、通常、quic-go
に基づいた別のサーバー実装を使用します。これには通常、既存の http.Handler
をQUICサーバーで「ラップ」することが含まれます。
前提条件:
-
quic-go
をインストールする:go get github.com/lucas-clemente/quic-go go get github.com/lucas-clemente/quic-go/http3
-
有効なTLS証明書とキーを生成する: 自己署名証明書はローカルテストでは機能しますが、正しく生成されていることを確認してください。QUIC(したがってHTTP/3)はTLSに大きく依存しています。
前のサーバー例を quic-go
でHTTP/3を使用するように適応させましょう。
package main import ( "fmt" "log" "net/http" "os" "time" "github.com/lucas-clemente/quic-go/http3" // quic-goからHTTP/3パッケージをインポート "github.com/lucas-clemente/quic-go/qlog" // オプション:QUIC接続ロギング用 ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, world from %s! (via HTTP/3 server)", r.Proto) } func main() { // アプリケーションハンドラーを構成する mux := http.NewServeMux() mux.HandleFunc("/", helloHandler) certFile := "server.crt" // このファイルが存在することを確認 keyFile := "server.key" // このファイルが存在することを確認 // 比較またはフォールバックのために、標準のHTTP/1.1およびHTTP/2サーバーを作成する httpServer := &http.Server{ Addr: ":8080", Handler: mux, TLSConfig: nil, // 特定のTLS構成が必要な場合は、ここで設定します } // HTTP/3サーバーを作成する quicServer := &http3.Server{ Addr: ":8081", // HTTP/3は通常、別のポートまたはサービスで実行されます Handler: mux, QuicConfig: &quic.Config{ // オプション:QUIC固有の設定を構成する // qlogを有効にして詳細なQUICイベントログを記録できます // qlog出力が必要な場合は、ここで構成します。 // 例:Tracing: qlog.DefaultConnectionTracer(nil), }, } // HTTP/1.1およびHTTP/2のListenAndServeTLS go func() { log.Println("HTTP/1.1 & HTTP/2 server starting on https://localhost:8080") if err := httpServer.ListenAndServeTLS(certFile, keyFile); err != nil && err != http.ErrServerClosed { log.Fatalf("HTTP/1.1/2 server failed: %v", err) } }() // HTTP/3のListenAndServe log.Println("HTTP/3 server starting on https://localhost:8081") // ListenAndServeは、HTTP/3のQUICトランスポートを自動的に使用します if err := quicServer.ListenAndServeTLS(certFile, keyFile); err != nil { log.Fatalf("HTTP/3 server failed: %v", err) } // 注意:実際的な使用では、適切なALPNネゴシエーションを使用して // 同じポートでHTTP/1.1/2とHTTP/3を組み合わせるか、 // または前面にプロキシを置いて別々のポートで実行することを検討してください。 // ブラウザは現在、通常はHTTP/1.1/2を最初に試行し、 // 次にAlt-Svcヘッダー経由でHTTP/3を発見します。 }
HTTP/3の実行とテスト:
HTTP/3のテストは、ブラウザのサポートがまだ進化中であり、多くの場合特定のフラグや構成が必要となるため、HTTP/2よりも少しトリッキーです。
server.crt
とserver.key
を生成する(まだ行っていない場合)。- <span>Go</span> サーバーを実行する:
go run your_http3_server.go
- クライアントサイドテスト:
- ブラウザ: 2023年末/2024年初頭現在、主要なブラウザ(Chrome、Firefox、Edge)のほとんどは、フラグの背後で実験的なHTTP/3サポートを備えています。
- Chrome:
chrome://flags/#enable-quic
に移動し、「Experimental QUIC protocol」を有効にします。 - Firefox:
about:config
に移動し、network.http.http3.enabled
を検索してtrue
に設定します。
- Chrome:
- curl:
curl
コマンドラインツールは、QUICサポート(nghttp3
とquiche
を使用)でコンパイルできます。サポートされているcurl
バージョンがある場合、次のようにテストできます。
(自己署名証明書の場合はcurl -v --http3 https://localhost:8081
--insecure
が必要になる場合があります)。 - Alt-Svcヘッダー: クライアントがHTTP/3エンドポイントを自動的に検出するには、HTTP/1.1/2サーバーがレスポンスで
Alt-Svc
ヘッダーを送信する必要があります。これは、クライアントに同じリソースが別のポート(あるいはホスト)でHTTP/3経由で利用可能であることを伝えます。
- ブラウザ: 2023年末/2024年初頭現在、主要なブラウザ(Chrome、Firefox、Edge)のほとんどは、フラグの背後で実験的なHTTP/3サポートを備えています。
HTTP/1.1/2サーバーに Alt-Svc
ヘッダーを追加するには:
go func helloHandler(w http.ResponseWriter, r *http.Request) { // HTTP/3 を別ポートで検出するクライアント用のみ if r.ProtoMajor < 3 { w.Header().Set("Alt-Svc", `h3=":8081"; ma=2592000`) // クライアントにポート8081でHTTP/3が利用可能であることを通知 } fmt.Fprintf(w, "Hello, world from %s! (via HTTP/3 server)", r.Proto) }
Alt-Svc
ヘッダーを使用すると、HTTP/3が有効になっているブラウザは、初期のHTTP/2接続後に指定されたポートでHTTP/3にアップグレードしようとする可能性があります。
結論
<span>Go</span> WebサーバーをモダンHTTPプロトコルに対応するようにアップグレードすることは、より高速で、より信頼性の高く、将来性のあるアプリケーションを構築するための具体的な一歩です。HTTP/2は、ListenAndServeTLS
との自動統合のおかげで、<span>Go</span> では最小限の労力でHTTP/1.1よりも大幅なパフォーマンス向上を提供します。<span>Go</span> でのHTTP/3サポートはまだ実験段階であり quic-go
のような外部ライブラリが必要ですが、Web通信の最先端を表しており、特に困難なネットワークでさらに大きな復元力と速度を約束します。これらのプロトコルを採用することで、<span>Go</span> サービスは今日の要求の厳しいWeb環境で優れたユーザーエクスペリエンスを提供できるようになります。高性能 <span>Go</span> Webサービスを構築するには、モダンなネットワークプロトコルを採用することが不可欠です。