9章Go言語によるHTTP/2、HTML 5のプロトコルの実装

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

9.1 HTTP/2

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

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

リスト9.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)
}

Go言語のHTTP/2サポートは環境変数によって制御できます。

表9.1 GODEBUG環境変数によるHTTP/2機能の制御

環境変数

概要

http2client=0

クライアントのHTTP/2サポートを無効にする

http2server=0

サーバーのHTTP/2サポートを無効にする

http2debug=1 ...