首頁 > 後端開發 > Golang > 如何覆蓋 Go 中間件中衝突的伺服器標頭?

如何覆蓋 Go 中間件中衝突的伺服器標頭?

DDD
發布: 2024-11-26 19:43:11
原創
158 人瀏覽過

How Can I Override Conflicting Server Headers in Go Middleware?

在Go 中間件中重寫伺服器頭

背景

背景

在Go 中,你可以使用中間件處理和修改HTTP 請求和回應。但是,當新增伺服器中間件來控制 HTTP 標頭時,如果其他處理程序也設定了伺服器標頭,您可能會遇到回應中存在多個伺服器標頭的問題。

  • 可能的解決方案
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)
    })
}
登入後複製
自訂ResponseWriter 包裝器:
    您可以定義一個自訂ResponseWriter 包裝器來設定在寫入入所有標頭之前的伺服器標頭。這引入了額外的間接層,但有效地覆蓋了現有的伺服器標頭。
  • 反轉中間件順序:您可以反轉中間件的順序,將伺服器中間件放在最後,因此它對伺服器標頭有最終決定權。

Inner-Most中間件: 或者,使伺服器中間件成為最內部的中間件,允許其攔截並覆蓋外部處理程序設定的其他標頭。

  • 附加說明
  • 自訂 ResponseWriter 包裝器方法引入了一種新類型,需要更多程式碼維護。
反轉或將伺服器中間件置於最內層可以改變中間件鏈的預期流程。 首選解決方案取決於應用程式的特定要求和複雜性。

以上是如何覆蓋 Go 中間件中衝突的伺服器標頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板