Échec de l'accès au sous-domaine à partir du domaine principal : en-tête 'Access-Control-Allow-Origin' manquant
Résumé du problème
Lors de l'accès au serveur API d'un sous-domaine à partir du domaine principal, une erreur de politique CORS est rencontrée : "Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée."
Considérations relatives à la vérification en amont
Avant d'explorer des solutions potentielles, il est crucial de vérifier la demande de contrôle en amont à l'aide des Chrome DevTools pour exclure les problèmes de mise en cache et identifier le type de demande approprié pour un dépannage plus approfondi.
Étapes de diagnostic
Exemples de code
Pendant que l'option 1 fonctionne En l'état, les exemples suivants visent à démontrer différentes approches pour résoudre les problèmes CORS :
Option 2 : Middleware CORS personnalisé
<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 : Middleware CORS de la bibliothèque externe
<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>
Résolution
Dans le cas spécifique du problème donné, il a été découvert que le problème provenait d'une charge AWS incorrecte Paramètres du groupe cible de l'équilibreur, en particulier une mauvaise configuration du protocole en tant que HTTPS lorsque les certificats n'étaient attribués qu'à Route 53 et ALB. Changer le protocole en HTTP a résolu le problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!