IrisでHTTPレスポンスヘッダを設定する方法
開発環境は、Windows 10 Pro(64bit) + go version go1.15.3 windows/amd64。
Vue CLIで開発用サーバーと、Go言語のマイクロWebフレームワークであるIrisのWebサーバーでAPI用のサーバーを立ち上げて、通信する際に、同じlocalhostでも、ポート番号が違うので、異なるOrigin扱いとなり、CORS対策のため、通信できず、それを解決するためには、APIサーバー側に、Access-Control-Allow-OriginをHTTPレスポンスヘッダに追加しなくてはならず、その方法のメモ。公式ドキュメントにはなかったので、自分で、GitHubのソースコードを見て、方法を発見しました。
以下、そのコード。
package main import ( "github.com/kataras/iris/v12" ) type Tasks struct { Id int `json:"id"` Task string `json:"task"` Is_checked bool `json:"is_checked"` } func main(){ app := iris.New() app.Get("/", func(ctx iris.Context){ // ここを追加する ctx.Header("Access-Control-Allow-Origin", "*") tasks := []Tasks{ {Id: 1, Task: "task1", Is_checked: false}, {Id: 2, Task: "task2", Is_checked: false}, {Id: 3, Task: "task3", Is_checked: false}, } ctx.JSON(tasks) }) app.Listen(":8080") }
探す思考の手順として、
- フレームワークとは関係なくHTTPレスポンスヘッダを設定する方法を探し、どうやら、http.ResponseWriterが必要だと分かる。
- ctxを扱う構造体内で、http.ResponseWriterの別名になっているメンバはないか探し、構造体Contextのwriterメンバを発見。
- 専用の関数がないか「writer」で、ソースコード内を検索していると、今回の目的に叶うHeader関数を発見
という手順。たったこれだけだ。公式ドキュメントにこれぐらい記述してもらいたい。