Festlegen von HTTP-Headern

165

Ich versuche, einen Header in meinem Go-Webserver festzulegen. Ich benutze gorilla/muxund net/httpPakete.

Ich möchte festlegen Access-Control-Allow-Origin: *, dass domänenübergreifendes AJAX zulässig ist.

Hier ist mein Go-Code:

func saveHandler(w http.ResponseWriter, r *http.Request) {
// do some stuff with the request data
}

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/save", saveHandler)
    http.Handle("/", r)
    http.ListenAndServe(":"+port, nil)
}

Das net/httpPaket enthält eine Dokumentation, in der das Senden von HTTP-Anforderungsheadern wie bei einem Client beschrieben wird. Ich bin nicht genau sicher, wie Antwortheader festgelegt werden sollen.

Zen
quelle

Antworten:

227

Egal , ich habe es herausgefunden - ich habe die Set()Methode angewendet bei Header()(doh!)

Mein Handler sieht jetzt so aus:

func saveHandler(w http.ResponseWriter, r *http.Request) {
    // allow cross domain AJAX requests
    w.Header().Set("Access-Control-Allow-Origin", "*")
}

Vielleicht hilft das irgendwann jemandem, dem Koffein entzogen ist wie mir :)

Zen
quelle
2
Ich hatte das gleiche Problem, es kann auch hilfreich sein, hinzuzufügen: w.Header().Add("Access-Control-Allow-Methods", "PUT") w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
Ray
1
Dies funktioniert nicht, wenn der AJAX-Client festlegt withCredentials:true(der Wert "*" ist beim Senden von Anmeldeinformationen nicht zulässig, was ein häufiger Anwendungsfall ist). Sie müssen den Ursprung auf den Anforderer setzen (siehe Matt Buccis Antwort unten, wie).
Orkaman