Echo で実装した Web アプリケーションにおいて、リバースプロキシ経由のアクセスで X-Forwarded-For
ヘッダが付いているか確認するために HTTP リクエストヘッダを標準出力にダンプする処理をミドルウェアで書いた。
ミドルウェアは、無名関数でサクッと書けるので便利。
package main
import (
"github.com/labstack/echo"
"fmt"
"log"
"os"
)
func main() {
e := echo.New()
e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
if err := next(c); err != nil {
c.Error(err)
}
output := fmt.Sprintf("%#v", c.Request().Header)
os.Stdout.Write([]byte(output + "\n"))
return next(c)
}
})
log.Fatal(e.Start(":9001"))
}
ローカルで実行して、ブラウザでアクセスすると下記のように出力される。
http.Header{"Cache-Control":[]string{"max-age=0"}, "User-Agent":[]string{"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}, "Accept":[]string{"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}, "Accept-Encoding":[]string{"gzip, deflate, br"}, "Accept-Language":[]string{"ja,en-US;q=0.9,en;q=0.8"}, "Connection":[]string{"keep-alive"}, "Upgrade-Insecure-Requests":[]string{"1"}}