k01ken’s b10g

He110 W0r1d!

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")
}

探す思考の手順として、

  1. フレームワークとは関係なくHTTPレスポンスヘッダを設定する方法を探し、どうやら、http.ResponseWriterが必要だと分かる。
  2. ctxを扱う構造体内で、http.ResponseWriterの別名になっているメンバはないか探し、構造体Contextのwriterメンバを発見。
  3. 専用の関数がないか「writer」で、ソースコード内を検索していると、今回の目的に叶うHeader関数を発見

という手順。たったこれだけだ。公式ドキュメントにこれぐらい記述してもらいたい。

■参考リンク

kataras / iris