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
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 ( "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>
Option 3: CORS-Middleware aus externer Bibliothek
<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>
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!