为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:我可以删除来​​自 ReverseProxy 的响应标头吗?

Golang:我可以删除来​​自 ReverseProxy 的响应标头吗?

Go
POPMUISE 2022-01-10 10:38:09
我正在使用 httputil.ReverseProxy 将 Amazon s3 文件代理给我的客户。我想隐藏来自 Amazon 的所有标头 - 这可能无需重新实现反向代理吗?proxy := httputil.ReverseProxy{Director: func(r *http.Request) {    r.Header = http.Header{} // Don't send client's request headers to Amazon.    r.URL = proxyURL    r.Host = proxyURL.Host}}proxy.ServeHTTP(w, r) // How do I remove w.Headers ?
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

您可以实现 ReverseProxy.Transport


type MyTransport struct{

    header http.Header

}

func (t MyTransport) RoundTrip(r *Request) (*Response, error){

    resp, err := http.DefaultTransport.RoundTrip(r)

    resp.Header = t.header

    return resp, err

}

mytransport := MyTransport{

//construct Header

}

proxy := httputil.ReverseProxy{Director: func(r *http.Request) {

    r.Header = http.Header{} // Don't send client's request headers to Amazon.

    r.URL = proxyURL

    r.Host = proxyURL.Host

  },

  Transport: mytransport,

}


查看完整回答
反对 回复 2022-01-10
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这是我删除/替换所有 http.ReverseProxy 响应标头的解决方案:


type responseHeadersTransport http.Header


func (t responseHeadersTransport) RoundTrip(r *http.Request) (*http.Response, error) {

    resp, err := http.DefaultTransport.RoundTrip(r)

    if err != nil {

        return nil, err

    }

    resp.Header = http.Header(t)

    return resp, nil

}



func ProxyFile(w http.ResponseWriter, r *http.Request) {

    // ...


    headers := http.Header{}

    headers.Set("Content-Type", file.ContentType)

    headers.Set("Content-Length", fmt.Sprintf("%d", file.Filesize))

    headers.Set("Content-Disposition", fmt.Sprintf("inline; filename=\"%s\"", file.Filename))


    proxy := httputil.ReverseProxy{

        Director: func(r *http.Request) { // Remove request headers.

            r.Header = http.Header{}

            r.URL = proxyURL

            r.Host = proxyURL.Host

        },

        Transport: responseHeadersTransport(headers), // Replace response headers.

    }

    proxy.ServeHTTP(w, r)

}


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号