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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在中間件中重寫內(nèi)容長(zhǎng)度

在中間件中重寫內(nèi)容長(zhǎng)度

Go
交互式愛情 2023-06-12 16:57:49
下面的代碼重寫了一些查詢的 http body 響應(yīng)。但是,它無(wú)法更新“內(nèi)容長(zhǎng)度”標(biāo)頭字段,它始終保持相同的原始值。如何更新 http 響應(yīng)的內(nèi)容長(zhǎng)度標(biāo)頭字段?type writeReplacer struct {    http.ResponseWriter    search  []byte    replace func(*http.Request) string    buf     []byte    r       *http.Request    dir     string}func (w *writeReplacer) Write(in []byte) (int, error) {    if w.buf == nil {        w.buf = []byte{}    }    w.buf = append(w.buf, in...)    n := len(in)    if index := bytes.LastIndex(w.buf, w.search); index > -1 {        var r []byte        if w.dir == "before" {            g := []byte(w.replace(w.r))            n += len(g)            r = append(g, w.buf[index:]...)            w.buf = append(w.buf[:index], r...)        } else {            g := []byte(w.replace(w.r))            n += len(g)            r = append(r, w.buf[:index+len(w.search)]...)            r = append(r, g...)            r = append(r, w.buf[index:]...)            w.buf = r        }    }    return n, nil}func (w *writeReplacer) Flush() {    w.ResponseWriter.Header().Set("Content-Length", fmt.Sprint(len(w.buf)))    w.ResponseWriter.Write(w.buf[:])    w.buf = w.buf[:0]}func InsertAfter(h http.Handler, path string, search []byte, replace func(*http.Request) string) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        if r.URL.Path == path {            w.Header().Del("Content-length")            w = &writeReplacer{ResponseWriter: w, search: search, replace: replace, r: r, dir: "after"}            defer w.(http.Flusher).Flush()        }        h.ServeHTTP(w, r)    })}func InsertBefore(h http.Handler, path string, search []byte, replace func(*http.Request) string) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        if r.URL.Path == path {            w.Header().Del("Content-length")            w = &writeReplacer{ResponseWriter: w, search: search, replace: replace, r: r, dir: "before"}            defer w.(http.Flusher).Flush()        }        h.ServeHTTP(w, r)    })}
查看完整描述

1 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

訣竅是重寫ResponseWriter.WriteHeader.


我相信這與 write 可能會(huì)在第一次調(diào)用時(shí)調(diào)用 writeheader 這一事實(shí)有關(guān),從那里我沒(méi)有將指令放在正確的位置。


為了防止進(jìn)一步的困難,我更喜歡使用分塊傳輸。


代碼更改是:


func (w *writeReplacer) WriteHeader(statusCode int) {

? ? w.Header().Del("Content-length")

? ? w.Header().Set("Transfer-Encoding", "chunked")

? ? w.ResponseWriter.WriteHeader(statusCode)

}


查看完整回答
反對(duì) 回復(fù) 2023-06-12
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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