第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果已設(shè)置標(biāo)頭,如何使用自定義 http 處理程序/中間件?

如果已設(shè)置標(biāo)頭,如何使用自定義 http 處理程序/中間件?

Go
尚方寶劍之說 2021-09-10 15:05:21
我試圖在 go 中鏈接 HTTP 處理程序以提供一些附加功能,如下所示:package routerimport (    // snip    "github.com/gorilla/mux"    "github.com/gorilla/handlers"    "net/http")// snipr := mux.NewRouter()/* routing code */var h http.Handlerh = rif useGzip {    h = handlers.CompressHandler(h)}if useLogFile {    fn := pathToLog    accessLog, err := os.OpenFile(fn, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)    if err != nil {        panic(err)    }    h = handlers.CombinedLoggingHandler(accessLog, h)}// etc...問題是,如果任何HTTP頭已經(jīng)由一個控制器設(shè)置大猩猩/ MUX路由器點(例如,w.WriteHeader(404)或w.Header().Set("Content-Type", "application/json")) -此默默休息的任何“包裝”處理程序試圖設(shè)置或添加自己的頭,像壓縮處理程序。我看不到任何錯誤,除非我忘記在某處捕獲錯誤,但瀏覽器收到無效響應(yīng)。有沒有什么優(yōu)雅的方法來處理這個問題,除了將標(biāo)題藏在某處然后讓最終處理程序編寫它們之外?這似乎意味著重寫處理程序的代碼,如果可能的話,我很想避免這樣做。
查看完整描述

2 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗 獲得超2個贊

一旦您調(diào)用w.WriteHeader(404),標(biāo)題就會連接到電線上。所以你不能再添加它了。最好的方法是緩沖狀態(tài)代碼并將其寫入鏈的末尾。

例如,您可以提供自己的包裝器,http.ResponseWriter以便重新實現(xiàn)WriteHeader()以保存狀態(tài)值。然后添加方法Commit()來實際編寫它。調(diào)用Commit()最后一個處理程序。當(dāng)然,您必須以某種方式確定最后一個處理程序。


查看完整回答
反對 回復(fù) 2021-09-10
?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊

我經(jīng)歷了同樣的默默失敗的行為。但僅在我使用 WritheHeader 設(shè)置 StatusOK 以外的狀態(tài)代碼的處理程序中。我認(rèn)為 CompressHandler 的這一部分出了問題:


if h.Get("Content-Type") == "" {

    h.Set("Content-Type", http.DetectContentType(b))

}

在我自己的處理程序中顯式設(shè)置內(nèi)容類型時,這似乎已解決:


w.Header().Set("Content-Type", "text/html; charset=utf-8")

w.WriteHeader(code)


查看完整回答
反對 回復(fù) 2021-09-10
  • 2 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號