Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Go言語でのCORSエラーに対する対応

お久しぶりです!!
8月末から忙しくなってしまい、ブログの更新が出来ていませんでした。。。
やっと落ち着いたので、再開していきたいと思います!!


今回はGO言語をサーバーサイドで動作させた際に発生したCORSエラーの対応についてです。

■CORSって?

CORSとはCross Origin Resourse Sharingの略であり、javascritのAjax通信を行う際に、安全に情報送受するための規約とのことです。
基本的にAjaxは同一オリジン(Origin)同士での通信を前提としているのですが、CORSにより異なるオリジン間での通信の安全性が保障されているようです。


f:id:Elsammit:20200905135844p:plain



ここで、オリジンって何ぞや?ですが、
ドメイン(domain)と比較するとイメージがわきやすいです。

ドメインとオリジンそれぞれ具体例はこちら。
ドメイン(domain):yahoo.co.jp
・オリジン(origin):https://yahoo.co.jp:443

要するに、オリジンは

オリジン = protocol + ドメイン + port番号

詳しいことはこちらに記載されておりました。
なんとなく CORS がわかる...はもう終わりにする。 - Qiita
【CORS】クロスドメインによるエラーについて - Qiita
オリジン間リソース共有 (CORS) - HTTP | MDN


■遭遇したエラー

今回私がGO言語で遭遇したエラーはこちらになります。

~~ has been blocked by CORS 
policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

どうやらCORSによってアクセスがブロックされているようだが、、、
う~~んわからん。。。


■解決方法

調べていったところ、どうやらCORS対策を行わなければならない模様。

まず、こちらを実行しcorsをダウンロード+インストール。

go get github.com/gin-contrib/cors


そして、go言語でのコードはこちらのようにすればよいです。

import "github.com/gin-contrib/cors"

func Do_Get(){
	r := gin.Default()
	config := cors.DefaultConfig()
     config.AllowOrigins = []string{"有効にするオリジン"}
     r.Use(cors.New(config))
	r.POST("/Get", func(c *gin.Context) {
		~~
	})
	r.Run() // listen and serve on 0.0.0.0:8080
}

func main() {
	Do_Get()
}

先ほどインストールしたcorsをimportし、

import "github.com/gin-contrib/cors"

コンフィグとして有効にするオリジンを登録すればよいです。

config := cors.DefaultConfig()
config.AllowOrigins = []string{"有効にするオリジン"}
r.Use(cors.New(config))

■最後に

認証系はやはり難しいですね(-_-;)
ハマると結構厄介です。。。

ただググれば何とか解決策が見つけられるにはかなりの救い!!
これからも頑張って色々手を動かしていきたいと思います!!