Maison  >  Article  >  développement back-end  >  Utilisez CORS dans le framework Beego pour résoudre des problèmes inter-domaines

Utilisez CORS dans le framework Beego pour résoudre des problèmes inter-domaines

WBOY
WBOYoriginal
2023-06-04 19:40:311573parcourir

Avec le développement des applications web et la mondialisation d'Internet, de plus en plus d'applications doivent effectuer des requêtes cross-domaines. Les requêtes inter-domaines sont un problème courant pour les développeurs front-end et peuvent empêcher les applications de fonctionner correctement. Dans ce cas, l’un des meilleurs moyens de résoudre le problème des requêtes d’origine croisée consiste à utiliser CORS.

Dans cet article, nous nous concentrerons sur la façon d'utiliser CORS pour résoudre des problèmes inter-domaines dans le framework Beego.

Qu'est-ce qu'une requête cross-domain ?

Dans les applications Web, les requêtes inter-domaines font référence à l'envoi de requêtes depuis une page Web d'un nom de domaine vers un serveur d'un autre nom de domaine. En règle générale, les données de requête et de réponse se trouvent dans le même domaine, ce qui signifie qu'elles utilisent le même protocole, le même port et le même type de protocole. Cependant, les navigateurs interdisent généralement les requêtes inter-domaines pour des raisons de sécurité.

Pour les projets avec front-end et back-end séparés, les problèmes de requêtes inter-domaines sont très courants. Par exemple, lors de l'écriture d'une application utilisant Vue sur le front-end, vous devrez peut-être envoyer une requête Ajax à un certain serveur back-end pour obtenir des données. Si le serveur front-end et le serveur back-end ne sont pas sous le même nom de domaine, le navigateur rejettera la requête et affichera une erreur même si la requête est écrite correctement au niveau du code. Il s'agit d'un problème de requête inter-domaines.

Qu’est-ce que CORS ?

CORS est l'abréviation de Cross-Origin Resource Sharing. Il s'agit d'un mécanisme basé sur le protocole HTTP qui permet aux applications Web d'accéder à des ressources inter-domaines. L'émergence du mécanisme CORS vise principalement à résoudre les problèmes de requêtes inter-domaines mentionnés ci-dessus.

Le mécanisme CORS est implémenté par le navigateur, qui utilise des en-têtes HTTP supplémentaires pour indiquer au navigateur quelles sources sont autorisées à accéder aux ressources multi-origines. Lors de la demande, le navigateur vérifiera les informations d'en-tête de réponse. Si le champ Access-Control-Allow-Origin existe dans les informations d'en-tête de réponse et que la valeur de ce champ correspond au nom de domaine et au numéro de port demandés, le navigateur autorise le croisement. demande de domaine.

Utiliser CORS dans Beego

Dans Beego, nous pouvons utiliser la bibliothèque beego-cors pour implémenter le mécanisme CORS. Voici comment installer la bibliothèque beego-cors :

go get github.com/astaxie/beego/plugins/cors

Après l'installation, nous devons importer la bibliothèque beego-cors dans l'application.

import "github.com/astaxie/beego/plugins/cors"

Configuration de CORS dans le routeur

Ensuite, nous présenterons comment utiliser CORS avec Beego. Si votre application est un nouveau projet, vous pouvez la définir lors de l'initialisation de l'application comme suit :

package main

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/plugins/cors"
)

func main() {
    beego.BConfig.Listen.HTTPAddr = "0.0.0.0"
    beego.BConfig.Listen.HTTPPort = 8080

    beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
        AllowOrigins: []string{"*"},
        AllowMethods: []string{"PUT", "PATCH", "GET", "POST", "DELETE", "OPTIONS"},
        AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},
        ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin"},
        AllowCredentials: true,
    }))

    beego.Run()
}

Dans le code ci-dessus, nous avons ajouté un filtre appelé cors en utilisant la méthode InsertFilter. Ce filtre fonctionne sur toutes les requêtes, nous utilisons donc le caractère générique * pour spécifier le routeur.

Dans la méthode Allow, nous configurons les sources, les méthodes et les en-têtes à autoriser. Ici, nous utilisons * pour autoriser toutes les origines. Bien entendu, vous pouvez également utiliser des noms de domaine ou des adresses IP spécifiques pour limiter les sources autorisées. Le type de contenu, l'autorisation et l'en-tête source sont également définis en fonction de la situation réelle.

Dans le champ AllowCredentials, nous le définissons sur true, ce qui signifie que les requêtes inter-domaines sont autorisées à envoyer des informations d'identification telles que des cookies.

Configurer CORS dans le contrôleur

En plus de configurer CORS dans le routeur, nous pouvons également configurer CORS dans le contrôleur. Cette méthode peut être configurée pour chaque contrôleur et offre une plus grande flexibilité. Les détails sont les suivants :

package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/plugins/cors"
)

type TestController struct {
    beego.Controller
}

func (c *TestController) Get() {
    origin := c.Ctx.Request.Header.Get("Origin")
    c.Ctx.Output.Header("Access-Control-Allow-Origin", origin)
    c.Ctx.Output.Header("Access-Control-Allow-Credentials", "true")
    c.Ctx.Output.Header("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
    c.Ctx.Output.Header("Access-Control-Allow-Headers", "Content-Type,Authorization")
    c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")

    c.Ctx.Output.Body([]byte("Hello, world!"))
}

Dans le code ci-dessus, nous obtenons d'abord le champ Origin de l'en-tête de requête, puis le définissons comme en-tête de réponse Access-Control-Allow-Origin. Il s'agit d'une étape importante dans le mécanisme CORS car elle indique au navigateur quelles sources nous autorisons à accéder aux ressources.

Nous définissons également les en-têtes de réponse Access-Control-Allow-Credentials, Access-Control-Allow-Methods et Access-Control-Allow-Headers. Leurs fonctions sont de permettre l'envoi d'informations d'identification, de méthodes de requête autorisées et de champs d'en-tête de requête autorisés.

Enfin, nous utilisons la méthode Output.Body pour envoyer les données de réponse au client.

Résumé

Dans cet article, nous avons présenté ce que sont les requêtes inter-domaines, le mécanisme CORS et comment utiliser CORS pour résoudre les problèmes inter-domaines dans le framework Beego. Pour les projets avec front-end et back-end séparés, les requêtes inter-domaines constituent un problème courant. Ce problème peut être bien résolu en utilisant le mécanisme CORS. Le mécanisme CORS peut être facilement implémenté dans Beego à l'aide de la bibliothèque beego-cors. J'espère que cet article vous sera utile.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn