Heim > Backend-Entwicklung > Golang > Wie kann ich widersprüchliche Server-Header in Go Middleware überschreiben?

Wie kann ich widersprüchliche Server-Header in Go Middleware überschreiben?

DDD
Freigeben: 2024-11-26 19:43:11
Original
208 Leute haben es durchsucht

How Can I Override Conflicting Server Headers in Go Middleware?

Überschreiben von Server-Headern in Go-Middleware

Hintergrund

In Go können Sie Middleware verwenden um HTTP-Anfragen und -Antworten zu verarbeiten und zu ändern. Wenn Sie jedoch eine Server-Middleware zur Steuerung von HTTP-Headern hinzufügen, können Probleme auftreten, wenn in der Antwort mehrere Server-Header vorhanden sind, wenn andere Handler den Server-Header ebenfalls festlegen.

Mögliche Lösungen

  • Benutzerdefinierter ResponseWriter-Wrapper: Sie können einen benutzerdefinierten ResponseWriter-Wrapper definieren, der nur den Server-Header festlegt bevor alle Header geschrieben werden. Dies führt eine zusätzliche Indirektionsebene ein, überschreibt jedoch effektiv vorhandene Server-Header.
type serverWriter struct {
    w           http.ResponseWriter
    name        string
    wroteHeader bool
}

func (s serverWriter) WriteHeader(code int) {
    if s.wroteHeader == false {
        s.w.Header().Set("Server", s.name)
        s.wroteHeader = true
    }
    s.w.WriteHeader(code)
}

func Server(h http.Handler, serverName string) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        sw := serverWriter{
            w:           w,
            name:        serverName,
            wroteHeader: false,
        }
        h.ServeHTTP(sw, r)
    })
}
Nach dem Login kopieren
  • Middleware-Reihenfolge umkehren: Sie können die Reihenfolge Ihrer Middleware umkehren, indem Sie die platzieren Die Server-Middleware bleibt an letzter Stelle, sodass sie das letzte Wort über den Server-Header hat.
  • Inner-Most Middleware: Alternativ können Sie die Server-Middleware zur innersten Middleware machen, sodass sie andere von äußeren Handlern festgelegte Header abfangen und überschreiben kann.

Zusätzliche Hinweise

  • Der benutzerdefinierte ResponseWriter-Wrapper-Ansatz führt einen neuen Typ ein, der etwas mehr Code erfordert Wartung.
  • Das Umkehren oder Verlegen der Server-Middleware nach innen kann den beabsichtigten Ablauf Ihrer Middleware-Kette verändern.
  • Die bevorzugte Lösung hängt von den spezifischen Anforderungen und der Komplexität Ihrer Anwendung ab.

Das obige ist der detaillierte Inhalt vonWie kann ich widersprüchliche Server-Header in Go Middleware überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage