Behandeln von Preflight-CORS-Anforderungen auf einem Go-Server

Also schreibe ich dieses RESTful-Backend in Go, das mit standortübergreifenden HTTP-Anforderungen aufgerufen wird, dh von Inhalten, die von einer anderen Site bereitgestellt werden (eigentlich nur ein anderer Port, aber die Richtlinie mit demselben Ursprung greift ein, also sind wir hier). .

In diesem Szenario sendet der Benutzeragent in einigen Fällen Preflight-OPTIONEN-Anforderungen, um zu überprüfen, ob die tatsächliche Anforderung sicher gesendet werden kann.

Meine Frage ist, wie man mit diesen Preflight-Anforderungen im Go-Kontext am besten umgeht und angemessen darauf reagiert. Die Art und Weise, wie ich sie mir vorgestellt habe, fühlt sich nicht sehr elegant an und ich frage mich, ob es einen anderen Ansatz gibt, an den ich nicht gedacht habe.

Mit dem Standardnet/http Paket kann ich die Request-Methode in der Handler-Funktion überprüfen, vielleicht so:

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

Ich kann auch verwendenGorillas mux Paket, und registrieren Sie einen Preflight "OPTIONS" -Han, dler für jeden relevanten URL-Pfad.

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

Vielleicht lautet die Antwort auf diese Frage einfach:Ja, das sind deine grundlegenden Optionen. Aber ich dachte, dass es einige bewährte Methoden gibt, die mir nicht bekannt sind.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage