Warum gibt der API-Server meiner Subdomain einen CORS-Fehler aus?

Patricia Arquette
Freigeben: 2024-10-30 01:39:03
Original
797 Leute haben es durchsucht

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

Zugriff auf die Subdomäne von der Hauptdomäne fehlgeschlagen: Header „Access-Control-Allow-Origin“ fehlt

Problemzusammenfassung

Beim Zugriff auf den API-Server einer Subdomäne von der Hauptdomäne aus wird ein CORS-Richtlinienfehler festgestellt: „Auf der angeforderten Ressource ist kein ‚Access-Control-Allow-Origin‘-Header vorhanden.“

Überlegungen zur Preflight-Überprüfung

Bevor Sie sich mit möglichen Lösungen befassen, ist es wichtig, die Preflight-Anfrage mit den Chrome DevTools zu überprüfen, um Caching-Probleme auszuschließen und den geeigneten Anfragetyp für die weitere Fehlerbehebung zu identifizieren.

Diagnoseschritte

  • CORS-Einstellungen prüfen: Stellen Sie sicher, dass der serverseitige Code CORS korrekt implementiert und die erforderlichen Header hinzufügt.
  • Proxy-Interception prüfen: Stellen Sie fest, ob Reverse-Proxys die Übertragung des Access-Control-Allow-Origin-Headers stören.
  • Anwendungsbereitstellung untersuchen: Stellen Sie sicher, dass die Anwendung, die den API-Server hostet, korrekt bereitgestellt wird, da ein 502 Bad Gateway-Fehler auf Bereitstellungsprobleme hinweisen kann.

Codebeispiele

Während Option 1 funktioniert So wie sie sind, sollen die folgenden Beispiele verschiedene Ansätze zur Lösung von CORS-Problemen demonstrieren:

Option 2: Benutzerdefinierte CORS-Middleware

<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>
Nach dem Login kopieren

Option 3: CORS-Middleware aus externer Bibliothek

<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>
Nach dem Login kopieren

Lösung

Im konkreten Fall des gegebenen Problems wurde festgestellt, dass das Problem auf eine falsche AWS-Last zurückzuführen war Balancer-Zielgruppeneinstellungen, insbesondere falsche Konfiguration des Protokolls als HTTPS, wenn die Zertifikate nur Route 53 und ALB zugewiesen wurden. Durch die Änderung des Protokolls auf HTTP wurde das Problem behoben.

Das obige ist der detaillierte Inhalt vonWarum gibt der API-Server meiner Subdomain einen CORS-Fehler aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage