HOME > Web > Go言語ならたった20行ほど!!HTTP2対応サーバの作り方
Go言語を使ってとっても簡単にHTTP2に対応したWebサーバを構築できる事を知りましたので勉強がてら実装してみました。 本当にとっても簡単に実装できます。
作り方は下記の流れです。
import net/http
でWebサーバを構築http.ListenAndServe
の箇所をhttp.ListenAndServeTSL
に変更ちなみに私は下記の環境で開発しています。
それでは順番に見ていきましょう。
ターミナルで/usr/local/go/src/crypto/tls/
にあるgenerate_cert.go --host hostname
を実行します。
ターミナルで実行
sudo go run /usr/local/go/src/crypto/tls/generate_cert.go --host `hostname`
下記のようにcert.pem
とkey.pem
が出力されます。
2016/10/18 20:47:57 written cert.pem
2016/10/18 20:47:57 written key.pem
作成したcert.pem
とkey.pem
は後で使います。
IntelliJ IDEA Community
でGoのプロジェクトを作成します。
※IntelliJ IDEA Community
でのGoの環境構築がお済みでない場合には前日開催したハンズオンの資料に詳しく載っていますので確認してください。
プロジェクト名はとりあえずhttp2server
にします。この部分はお好みで設定してください。
プロジェクト作成が完了したら先程作成したサーバ証明書cert.pem
、秘密鍵証明書key.pem
をプロジェクトの中に入れます。
コピーしたらmain.go
を作成して下記のコードを追加します。
main.go
package main
import (
"net/http"
"fmt"
"log"
)
func handle(w http.ResponseWriter, r *http.Request){
fmt.Fprint(w,"Hello world!!")
}
func main() {
http.HandleFunc("/",handle)
fmt.Println("server start port 443")
err := http.ListenAndServeTLS(":443","cert.pem","key.pem",nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
これで実装は終わりです。起動してみましょう。
sudo go run main.go
server start port 443
と表示されたらブラウザでhttps://localhost
にアクセスしてみましょう。
HTTP/2 and SPDY indicator
というChromeエクステンションを使えば簡単に確認できます。
下図のようにアクセスしたURLのページがHTTP2に対応している場合は矢印の部分が青色になります。
たった数行でWebサーバを構築できるのがGo言語の魅力の一つです。さらにHTTP2の対応もこんなに簡単にできます。
ただ今回は証明書と秘密鍵はテスト用を使っています。本番環境に対応するにはLet's encrypt
か信頼のある認証局から証明書・秘密鍵を作成しないといけませんので注意してください。