亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

使 httputil.ReverseProxy 轉發響應流正確

使 httputil.ReverseProxy 轉發響應流正確

Go
白豬掌柜的 2023-06-01 15:08:55
我的主 Web 服務器中有反向代理,專門用于某個微服務,并處理對其適當的微服務的轉發請求。func newTrimPrefixReverseProxy(target *url.URL, prefix string) *httputil.ReverseProxy {    director := func(req *http.Request) {        // ... trims prefix from request path and prepends the path of the target url    }    return &httputil.ReverseProxy{Director: director}}這對于純 JSON 響應非常有效,但最近我在嘗試通過反向代理提供內容(流響應)時遇到了問題。提供內容的方式無關緊要,當直接訪問服務而不是通過反向代理訪問服務時,(視頻)內容將按預期提供。服務內容:http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {    http.ServeContent(w, r, "video.mp4", time.Now().Add(time.Hour*24*365*12*9*-1), videoReadSeeker)})同樣,videoReadSeeker 和內容的提供方式不是問題,問題是通過反向代理將我的響應按預期轉發給請求者;直接訪問該服務時,會顯示視頻,我可以隨心所欲地瀏覽它。請注意,接收到內容的數據響應(http 狀態、標頭),但沒有接收到響應正文中的內容流。我如何才能確保反向代理按照內容的預期處理流式響應?
查看完整描述

1 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

使用時是否得到相同的結果:


package main


import (

    "log"

    "net/http"

    "net/http/httputil"

    "net/url"

)


func main() {

    u, err := url.Parse("http://localhost:8080/asdfasdf")

    if err != nil {

        log.Fatal("url.Parse: %v", err)

    }


    proxy := httputil.NewSingleHostReverseProxy(u)


    log.Printf("Listening at :8081")

    if err := http.ListenAndServe(":8081", proxy); err != nil {

        log.Fatal("ListenAndServe: %v", err)

    }

}

最終,這些在幕后是相同的實現,但此處提供的 director 確保存在一些預期的標頭,您需要這些標頭才能使某些代理功能按預期運行。


查看完整回答
反對 回復 2023-06-01
  • 1 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號