カテゴリ: Go言語 更新日: 2025/11/19

Go言語でのCORS対応の基礎と安全な設定方法

Go言語でのCORS対応の基礎と安全な設定方法
Go言語でのCORS対応の基礎と安全な設定方法

先生と生徒の会話形式で理解しよう

生徒

「先生、GoでWeb APIを作ったんですが、他のサイトからリクエストが弾かれてしまいます。どうすればいいですか?」

先生

「それはCORSの問題ですね。CORSとは、異なるドメインからのアクセスを制御する仕組みです。Cross-Origin Resource Sharingの略で、Webブラウザがセキュリティ上の理由で制限しているものです。」

生徒

「具体的にはどうやって対応するんですか?」

先生

「Goでは、HTTPヘッダにAccess-Control-Allow-Originを追加することで対応できます。また、サードパーティのライブラリを使うと簡単に設定できます。」

1. CORSとは?

1. CORSとは?
1. CORSとは?

CORSは、Webブラウザが異なるオリジン(ドメイン、ポート、プロトコルの組み合わせ)からのリクエストを制限する仕組みです。例えば、https://example.comのページがhttps://api.example2.comのデータにアクセスするときに、ブラウザは安全性のために制限します。

2. 基本的なCORS対応

2. 基本的なCORS対応
2. 基本的なCORS対応

GoでCORSを有効にするには、HTTPレスポンスヘッダにAccess-Control-Allow-Originを追加します。例えば、すべてのオリジンからアクセスを許可する場合は*を設定します。


func handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Write([]byte("CORS対応テスト"))
}

この方法は簡単ですが、*を使うとどのサイトからでもアクセスできるため、セキュリティ上注意が必要です。

3. サードパーティライブラリで簡単に設定

3. サードパーティライブラリで簡単に設定
3. サードパーティライブラリで簡単に設定

GoにはCORS設定を簡単に行えるライブラリがあります。例えばgithub.com/rs/corsを使うと安全かつ柔軟に設定できます。


import (
    "net/http"
    "github.com/rs/cors"
)

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("CORS設定済み"))
    })

    c := cors.New(cors.Options{
        AllowedOrigins: []string{"https://example.com"},
        AllowedMethods: []string{"GET", "POST"},
    })

    handler := c.Handler(mux)
    http.ListenAndServe(":8080", handler)
}

この設定では、https://example.comからのGETとPOSTのみ許可し、それ以外のサイトからのアクセスはブロックされます。

4. 安全なCORS設定のポイント

4. 安全なCORS設定のポイント
4. 安全なCORS設定のポイント
  • 必要なオリジンのみをAllowedOriginsに指定する
  • 不要なHTTPメソッドは許可しない
  • Cookieを利用する場合はAllowCredentials: trueを設定し、*を使わない

これにより、意図しない外部サイトからの不正アクセスを防ぎ、セキュリティを保ちながらCORS対応できます。

5. 実際の利用ケース

5. 実際の利用ケース
5. 実際の利用ケース

例えば、フロントエンドがhttps://myfrontend.com、バックエンドがhttps://myapi.comの構成の場合、CORSを正しく設定することで、フロントエンドから安全にAPIにアクセスできるようになります。間違って*を設定すると、他の悪意あるサイトからもAPIにアクセスできてしまうため注意が必要です。

カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Kotlin・Go・Swift記事の人気No3
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎