Need OPTIONS Methode kommt aus mobilem Gerät zu akzeptieren, versuchten mehr Möglichkeiten, so und immer seltsames Verhalten zu tun:Wie kann man die OPTIONS-Methode von Mobilgeräten mit Gorilla-Handler zulassen?
, wenn dies versucht, ich 403 vom Client erhalten: (Client sendet OPTIONS
vor POST
)
import (
"net/http"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/users", UserEndpoint)
r.HandleFunc("/projects", ProjectEndpoint)
methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST"}
http.ListenAndServe(":8000", handlers.CORS(methods)(r))
}
wenn ich weglassen die methods
:
http.ListenAndServe(":8000", handlers.CORS()(r))
ich werde 403 nicht autorisiert
Auch um spielte mit ihm, entfernt, um die GET
Methode:
methods := handlers.AllowedMethods([]string{"OPTIONS"}
http.ListenAndServe(":8000", handlers.CORS(methods)(r))
aber noch eine 200 GET
, wenn sie von Rest-Client in Browser (chromes DHC)
versucht bekommen konnte, aber wenn ich entfernen die OPTIONS
:
methods := handlers.AllowedMethods([]string{"DELETE", "GET", "HEAD", "POST"}
http.ListenAndServe(":8000", handlers.CORS(methods)(r))
ich 405
Das erste Beispiel basiert auf Gorilla-Handler-Dokumentation
Irgendwelche Ideen zu diesem Thema?
corsOptionMethod string = "OPTIONS"
...
if r.Method == corsOptionMethod {
if ch.ignoreOptions {
ch.h.ServeHTTP(w, r)
return
}
if _, ok := r.Header[corsRequestMethodHeader]; !ok {
w.WriteHeader(http.StatusBadRequest)
return
}
method := r.Header.Get(corsRequestMethodHeader)
if !ch.isMatch(method, ch.allowedMethods) {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
...
So 405 ist http.StatusMethodNotAllowed, so ist es vielleicht nicht CORS-Request-Header:
Dank
Wird 'OPTIONS' nicht ignoriert und dann in Cors Optionen widersprechen? –