猿问

转到重定向和代理上的 http.Request 标头

https://groups.google.com/forum/#!topic/golang-nuts/OwGvopYXpwE


正如在这个线程中看到的,当http.Client发送请求到重定向时,标头会被重置。


有一种解决方法,例如:


client.CheckRedirect = func(req *http.Request, via []*http.Request) error {

    if len(via) >= 10 {

        return fmt.Errorf("too many redirects")

    }

    if len(via) == 0 {

        return nil

    }

    for attr, val := range via[0].Header {

        if _, ok := req.Header[attr]; !ok {

            req.Header[attr] = val

        }

    }

    return nil

}

但我的问题是,如果我想通过我的代理服务器 http 请求,我该怎么做。


当 http 请求通过代理服务器时,标头是否全部重置?我是否必须http.Client在代理中设置另一个?


我使用https://github.com/elazarl/goproxy设置了我的代理服务器


谢谢,


当年话下
浏览 176回答 1
1回答

犯罪嫌疑人X

我简要地查看了代码,看起来 goproxy 没有以任何特殊方式处理 3XX 响应——它们只是被路由回您的客户端,因此它可以做出相应的反应。在您的情况下,您将使用所有标头集发出另一个请求。如果这不是您关心的问题,并且您只是想知道代理的存在是否需要在客户端进行任何黑客攻击,那么不,http.Client在使用代理时不会删除任何标头,它甚至不知道涉及代理.您可以通过设置您自己的简单服务器(例如在 Go 中)来轻松测试这些假设,该服务器返回重定向响应(向其自身或某些nc侦听器)并打印所有标头。通过代理将客户端路由到服务器时,您可以确保服务器端的一切正常。
随时随地看视频慕课网APP

相关分类

Go
我要回答