Heim >Backend-Entwicklung >Golang >Wie kann man Kontextwerte in Go-HTTP-Handlern sicher manipulieren?

Wie kann man Kontextwerte in Go-HTTP-Handlern sicher manipulieren?

Barbara Streisand
Barbara StreisandOriginal
2024-11-19 07:02:03735Durchsuche

How to Safely Manipulate Context Values in Go HTTP Handlers?

Manipulation von Kontextwerten in HTTP-Handlern

Das Festlegen von Kontextwerten innerhalb von HTTP-Handlern ist für die gemeinsame Nutzung von Daten zwischen Anforderungshandlern von entscheidender Bedeutung. Im HTTP-Paket von Go wird häufig die Funktion http.HandleFunc zum Registrieren von Handlern verwendet. Der Ansatz, Kontextwerte mithilfe von *r = *r.WithContext(ctx) festzulegen, wirft jedoch Bedenken auf.

Empfohlener Ansatz

Um ein Überschreiben des Anforderungsobjekts zu vermeiden, das zu unerwartetem Verhalten führen kann, ist es am besten, eine neue flache Kopie der Anfrage mit dem geänderten Kontextwert zurückzugeben.

func setValue(r *http.Request, val string) *http.Request {
  return r.WithContext(context.WithValue(r.Context(), myContext, val))
}

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    r = setValue(r, "foobar")
})

Dieser Ansatz stellt sicher, dass das ursprüngliche Anfrageobjekt unverändert bleibt und der aktualisierte Kontext weitergegeben wird any后续处理程序调用.

Übergabe der aktualisierten Anforderung

Wenn der Handler einen anderen Handler aufrufen muss, ist es wichtig, das aktualisierte Anforderungsobjekt an den neuen Handler zu übergeben. Andernfalls steht der geänderte Kontextwert dem nachfolgenden Handler nicht zur Verfügung.

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    r = setValue(r, "foobar")
    someOtherHandler.ServeHTTP(w, r)
})

Durch Befolgen dieser Best Practices können Sie Kontextwerte innerhalb von HTTP-Handlern effektiv verwalten und so eine effiziente Datenfreigabe und nahtlose Übergänge zwischen Anforderungshandlern ermöglichen .

Das obige ist der detaillierte Inhalt vonWie kann man Kontextwerte in Go-HTTP-Handlern sicher manipulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn