Golang フレームワーク Gin で CORS対応

環境

  • Go
  • Gin
  • dep

CORS (Cross-Origin Resource Sharing )

javascript などで API を叩く時に下記のようなエラーが出る場合のサーバーサイド側の対応。

Access to XMLHttpRequest at 'http://api.sample.com' from origin 'http://sample.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

やること

  • サーバーサイド側で header 情報に色々追加する。
    • どの言語の API でもやることは同じ。
      • Access-Control-Allow-Origin に色々書いていく。
  • Gin には簡単にセットできる gin-contrib/cors が用意されている。

Gin の CORS 対応

パッケージのインストール

$ dep ensure -add github.com/gin-contrib/cors

CORS 対応

  • http://sample.com を許可する
  • 細かい設定は色々あるが、最低限これだけで動く。
package main

import (
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
)

func main() {

	r := gin.Default()
	
	// CORS 対応
	config := cors.DefaultConfig()
	config.AllowOrigins = []string{"http://sample.com"}
	r.Use(cors.New(config))

	// CORS 対応の後にルーティングを書かないとうまく動かない
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	r.Run()
}