メイン ドメインからサブドメインへのアクセスに失敗しました: 'Access-Control-Allow-Origin' ヘッダーがありません
問題の概要
メイン ドメインからサブドメインの API サーバーにアクセスすると、CORS ポリシー エラーが発生します:「要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません。」
プリフライト チェックの考慮事項
考えられる解決策を詳しく調べる前に、Chrome DevTools を使用してプリフライト リクエストを検証し、キャッシュの問題を除外し、さらなるトラブルシューティングに必要な適切なリクエスト タイプを特定することが重要です。
診断手順
コード例
オプション 1 が機能する間現状では、次の例は、CORS 問題を解決するためのさまざまなアプローチを示すことを目的としています。
オプション 2: カスタム CORS ミドルウェア
<code class="go">package main import ( "log" "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.New() r.Use(CORS()) r.POST("/api/v1/users", func(ctx *gin.Context) { ctx.JSON(http.StatusOK, gin.H{"message": "OK"}) }) if err := r.Run(); err != nil { log.Printf("failed to start server: %v", err) } } func CORS() gin.HandlerFunc { return func(c *gin.Context) { c.Writer.Header().Set("Access-Control-Allow-Origin", "*") c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") c.Writer.Header().Set("Access-Control-Max-Age", "86400") if c.Request.Method == http.MethodOptions { c.AbortWithStatus(http.StatusNoContent) return } c.Next() } }</code>
オプション 3:外部ライブラリの CORS ミドルウェア
<code class="go">package main import ( "log" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.Use(cors.New(cors.Config{ AllowOrigins: []string{"*"}, AllowMethods: []string{"GET", "POST", "PUT", "DELETE"}, AllowHeaders: []string{"*"}, ExposeHeaders: []string{"Content-Length"}, AllowCredentials: true, MaxAge: 86400, })) router.GET("/api/v1/users", func(c *gin.Context) { c.JSON(200, gin.H{"message": "OK"}) }) if err := router.Run(); err != nil { log.Printf("failed to start server: %v", err) } }</code>
解決策
指定された問題の特定のケースでは、問題は不正な AWS 負荷に起因することが判明しましたバランサーのターゲット グループの設定、特に証明書が Route 53 と ALB にのみ割り当てられていたときにプロトコルを HTTPS として誤って設定しました。プロトコルを HTTP に変更すると、問題は解決しました。
以上が私のサブドメインの API サーバーが CORS エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。