ホームページ  >  記事  >  バックエンド開発  >  私のサブドメインの API サーバーが CORS エラーをスローするのはなぜですか?

私のサブドメインの API サーバーが CORS エラーをスローするのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 01:39:03724ブラウズ

Why Is My Subdomain's API Server Throwing a CORS Error?

メイン ドメインからサブドメインへのアクセスに失敗しました: 'Access-Control-Allow-Origin' ヘッダーがありません

問題の概要

メイン ドメインからサブドメインの API サーバーにアクセスすると、CORS ポリシー エラーが発生します:「要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません。」

プリフライト チェックの考慮事項

考えられる解決策を詳しく調べる前に、Chrome DevTools を使用してプリフライト リクエストを検証し、キャッシュの問題を除外し、さらなるトラブルシューティングに必要な適切なリクエスト タイプを特定することが重要です。

診断手順

  • CORS 設定の検査: サーバー側コードが CORS を正しく実装し、необхідné ヘッダーを追加していることを確認します。
  • プロキシ インターセプトの確認: リバース プロキシが Access-Control-Allow-Origin ヘッダーの送信を妨げているかどうかを確認します。
  • アプリケーション デプロイメントの調査: 502 Bad Gateway エラーはデプロイメントの問題を示している可能性があるため、API サーバーをホストしているアプリケーションが正しくデプロイされていることを確認してください。

コード例

オプション 1 が機能する間現状では、次の例は、CORS 問題を解決するためのさまざまなアプローチを示すことを目的としています。

オプション 2: カスタム CORS ミドルウェア

<code class="go">package main

import (
    &quot;log&quot;
    &quot;net/http&quot;

    &quot;github.com/gin-gonic/gin&quot;
)

func main() {
    r := gin.New()
    r.Use(CORS())

    r.POST(&quot;/api/v1/users&quot;, func(ctx *gin.Context) {
        ctx.JSON(http.StatusOK, gin.H{&quot;message&quot;: &quot;OK&quot;})
    })

    if err := r.Run(); err != nil {
        log.Printf(&quot;failed to start server: %v&quot;, err)
    }
}

func CORS() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Writer.Header().Set(&quot;Access-Control-Allow-Origin&quot;, &quot;*&quot;)
        c.Writer.Header().Set(&quot;Access-Control-Allow-Credentials&quot;, &quot;true&quot;)
        c.Writer.Header().Set(&quot;Access-Control-Allow-Headers&quot;, &quot;Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With&quot;)
        c.Writer.Header().Set(&quot;Access-Control-Max-Age&quot;, &quot;86400&quot;)
        if c.Request.Method == http.MethodOptions {
            c.AbortWithStatus(http.StatusNoContent)
            return
        }
        c.Next()
    }
}</code>

オプション 3:外部ライブラリの CORS ミドルウェア

<code class="go">package main

import (
    &quot;log&quot;

    &quot;github.com/gin-contrib/cors&quot;
    &quot;github.com/gin-gonic/gin&quot;
)

func main() {
    router := gin.Default()

    router.Use(cors.New(cors.Config{
        AllowOrigins:     []string{&quot;*&quot;},
        AllowMethods:     []string{&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;, &quot;DELETE&quot;},
        AllowHeaders:     []string{&quot;*&quot;},
        ExposeHeaders:    []string{&quot;Content-Length&quot;},
        AllowCredentials: true,
        MaxAge:           86400,
    }))

    router.GET(&quot;/api/v1/users&quot;, func(c *gin.Context) {
        c.JSON(200, gin.H{&quot;message&quot;: &quot;OK&quot;})
    })

    if err := router.Run(); err != nil {
        log.Printf(&quot;failed to start server: %v&quot;, err)
    }
}</code>

解決策

指定された問題の特定のケースでは、問題は不正な AWS 負荷に起因することが判明しましたバランサーのターゲット グループの設定、特に証明書が Route 53 と ALB にのみ割り当てられていたときにプロトコルを HTTPS として誤って設定しました。プロトコルを HTTP に変更すると、問題は解決しました。

以上が私のサブドメインの API サーバーが CORS エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。