[Go] chiでCORSヘッダを設定する方法

ググっても意外と出てこなくて焦ったのでメモ。

github.com/go-chi/cors を使う。

package main

import (
	"net/http"
	"os"

	"github.com/go-chi/chi"
	"github.com/go-chi/cors"
)

func main() {
	r := chi.NewRouter()
	r.Use(cors.Handler(cors.Options{
		AllowedOrigins:   []string{"*"}}))
	
	r.Get("/", pingHandler)

	http.ListenAndServe(":9999", r)
}

このように指定するだけ。ローカルでテストする際は問題ないが、本来は * を指定するのは避けたほうが良い。

curl での動作確認は以下のようなコマンドを打つと良い。Access-Control-Allow-Origin ヘッダに * が入っていることが確認できれば成功。

$ curl -i 'http://localhost:9999/' -H 'Origin: https://hogefuga:123'
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Vary: Origin
Date: Tue, 30 May 2023 12:08:25 GMT
Content-Length: 13
Content-Type: text/plain; charset=utf-8

Hello World!

もしくは、-D を使っても良い。

curl -D - localhost:9999 -H 'Origin: https://hogefuga:123'

ここでは、-H を使って Origin を指定しなければ Access-Control-Allow-Origin が表示されないことに注意する。