grpc-gatewayでCookieをmetadataに設定しない

grpc-gatewayはデフォルトで、一般的なHeaderの値を、Metadataに入れてリクエストを中継します。

ただ、Cookieの値は使わない場合もあるし、 ユーザーに見えるkeyよりも、もっと意味持たせたkeyをMetadataに入れたいとかある。

そんな時は、mux作るときに、ServeMuxOptionを渡してあげれば良いです。

func run() error {
    ctx := context.Background()
    ctx, cancel := context.WithCancel(ctx)
    defer cancel()

    mux := runtime.NewServeMux(
        runtime.WithIncomingHeaderMatcher(func(key string) (string, bool) {
            if key == "Cookie" { // CookieはMetadataに設定しない。
                return "", false
            }

            return runtime.DefaultHeaderMatcher(key)
        }),
    )
    opts := []grpc.DialOption{grpc.WithInsecure()}

    // ...

    return http.ListenAndServe(":8080", mux)
}