Goのnet/http互換WEBサーバやミドルウェアのメモ
WEBサーバやミドルウェア
とあるソースコードを見ていて知らないものがあるので、どういったものかメモしていく
go-chi/chi
webサーバでルーティング機能がある。デフォルトの net/http互換。
lightweight, idiomatic and composable router for building Go HTTP services
- 外部ライブラリ依存なし
- 軽量、速い
unrolled/secure
HTTP middleware for Go that facilitates some quick security wins.
net/http のHandlerに被せる形で利用できるミドルウェア
アクセス元ホストの制限やプロキシヘッダ、SSLの制限などをミドルウェアで行うことができる。
rs/cors
Go net/http configurable handler to handle CORS requests
CORSを利用したリクエストを制御するライブラリ 許可するメソッドやヘッダなどを定義して利用する。net/httpのHandlerとして登録可能。
上記3つを組み合わせてサーバとして動かす
package main
import (
"github.com/go-chi/chi"
"github.com/rs/cors"
"github.com/unrolled/secure"
"net/http"
"fmt"
)
func main() {
r := chi.NewRouter()
// Handlers which are set with Use will proceed requests before processing of Handler functions are sets HandleFunc, Handle, Route.
// In short, these are middlewares.
r.Use(newCors().Handler)
r.Use(newSecure().Handler)
r.HandleFunc("/test", test_handle)
r.Route("/route", func(r chi.Router) {
r.Get("/test", test_route)
})
http.ListenAndServe(":8080", r)
}
func test_handle(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello from test_handle.")
return
}
func test_route(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello from test_route.")
return
}
func newCors() *cors.Cors {
return cors.New(cors.Options{
AllowCredentials: true,
// ... And more options you want
})
}
func newSecure() *secure.Secure {
return secure.New(secure.Options{
BrowserXssFilter: true,
// ... And more options you want
})
}