10章GoによるHTTP/2、HTTP/3、HTML 5のプロトコルの実装

_images/ch10_header.jpg

ChatGPTのプロンプト。レスポンスがServer-Sent Eventsによって少しずつ送られてくる

本章では、8章のプロトコルの一部をGoで実装してみます。9章に関してはサーバー側で行うことが多く、それ以外もCSSや動画ストリーミングなので実装は省略します。

10.1 HTTP/2

Goは2016年2月にリリースされた1.6から、標準でHTTP/2サポートが組み込まれています。HTTPS通信を行う設定をするだけで、4章で説明したNPN/ALPNネゴシエーションの候補にHTTP/2を表すh2が追加されます。クライアント・サーバーともに、ネゴシエーションで相手がHTTP/2をサポートしていることが確認できると、HTTP/2で通信を行います。

リスト10-1は、Googleと通信してプロトコルバージョンを確認するサンプルです。

リスト10-1: プロトコルバージョンを確認する
package main

import (
    "fmt"
    "net/http"
)

func main() {
    resp, err := http.Get("https://google.com/")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    fmt.Printf("Protocol Version: %s\n", resp.Proto)
}