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.

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 :)


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.