Maison >développement back-end >Golang >Comment gérer avec élégance les requêtes CORS de contrôle en amont dans Go ?

Comment gérer avec élégance les requêtes CORS de contrôle en amont dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-03 08:51:40151parcourir

How to Elegantly Handle Preflight CORS Requests in Go?

Gestion des requêtes CORS de contrôle en amont dans Go

Lors du traitement de requêtes HTTP intersites à partir d'un serveur Go, l'agent utilisateur peut envoyer des requêtes OPTIONS de contrôle en amont pour vérifier la sécurité de la demande. Cet article explore les meilleures pratiques pour gérer et répondre avec élégance à ces requêtes de contrôle en amont.

Traditionnellement, en utilisant le package net/http, on peut vérifier la méthode de requête dans la fonction de gestionnaire :

func AddResourceHandler(rw http.ResponseWriter, r *http.Request) {
  switch r.Method {
  case "OPTIONS":
    // handle preflight
  case "PUT":
    // respond to actual request
  }
}

Alternativement, avec le package mux de Gorilla, on peut enregistrer un gestionnaire de contrôle en amont distinct pour chaque chemin d'URL :

r := mux.NewRouter()
r.HandleFunc("/someresource/item", AddResourceHandler).Methods("PUT")
r.HandleFunc("/someresource/item", PreflightAddResourceHandler).Methods("OPTIONS")

Pour Pour simplifier ce processus, envisagez d'encapsuler votre gestionnaire REST avec un gestionnaire CORS qui gère les demandes de contrôle en amont. Par exemple, en utilisant la méthode Handle de net/http :

func corsHandler(h http.Handler) http.HandlerFunc {
  return func(w http.ResponseWriter, r *http.Request) {
    if (r.Method == "OPTIONS") {
      //handle preflight in here
    } else {
      h.ServeHTTP(w,r)
    }
  }
}

Ce wrapper peut être utilisé comme suit :

http.Handle("/endpoint/", corsHandler(restHandler))

En encapsulant le gestionnaire REST, vous pouvez séparer votre logique et réutiliser le Gestionnaire CORS pour toutes les demandes pertinentes, offrant une solution plus élégante et maintenable.

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