Maison > développement back-end > Golang > le corps du texte

Comment puis-je remplacer les en-têtes de serveur en conflit dans Go Middleware ?

DDD
Libérer: 2024-11-26 19:43:11
original
138 Les gens l'ont consulté

How Can I Override Conflicting Server Headers in Go Middleware?

Remplacement des en-têtes de serveur dans Go Middleware

Arrière-plan

Dans Go, vous pouvez utiliser un middleware pour gérer et modifier les requêtes et réponses HTTP. Cependant, lors de l'ajout d'un middleware de serveur pour contrôler les en-têtes HTTP, vous pouvez rencontrer des problèmes avec la présence de plusieurs en-têtes de serveur dans la réponse si d'autres gestionnaires définissent également l'en-tête du serveur.

Solutions possibles

  • Wrapper ResponseWriter personnalisé : Vous pouvez définir un wrapper ResponseWriter personnalisé qui définit l'en-tête du serveur uniquement avant que tous les en-têtes soient écrits. Cela introduit une couche supplémentaire d'indirection mais remplace efficacement les en-têtes de serveur existants.
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)
    })
}
Copier après la connexion
  • Ordre inverse du middleware : Vous pouvez inverser l'ordre de votre middleware en plaçant le Le middleware du serveur est en dernier afin qu'il ait le dernier mot sur l'en-tête du serveur.
  • Inner-Most Middleware : Vous pouvez également faire du middleware du serveur le middleware le plus interne, lui permettant d'intercepter et de remplacer d'autres en-têtes définis par les gestionnaires externes.

Notes supplémentaires

  • L'approche du wrapper ResponseWriter personnalisé introduit un nouveau type, nécessitant un peu plus de code maintenance.
  • Inverser ou rendre le middleware du serveur le plus interne peut modifier le flux prévu de votre chaîne middleware.
  • La solution préférée dépend des exigences spécifiques et de la complexité de votre application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal