详细内容请看源码说明,下文提供一个中间件样例来进行请求转发

type Client struct {

// Transport specifies the mechanism by which individual

// HTTP requests are made.

// If nil, DefaultTransport is used.

Transport RoundTripper

// CheckRedirect specifies the policy for handling redirects.

// If CheckRedirect is not nil, the client calls it before

// following an HTTP redirect. The arguments req and via are

// the upcoming request and the requests made already, oldest

// first. If CheckRedirect returns an error, the Client's Get

// method returns both the previous Response (with its Body

// closed) and CheckRedirect's error (wrapped in a url.Error)

// instead of issuing the Request req.

// As a special case, if CheckRedirect returns ErrUseLastResponse,

// then the most recent response is returned with its body

// unclosed, along with a nil error.

//

// If CheckRedirect is nil, the Client uses its default policy,

// which is to stop after 10 consecutive requests.

CheckRedirect func(req *Request, via []*Request) error

// Jar specifies the cookie jar.

//

// The Jar is used to insert relevant cookies into every

// outbound Request and is updated with the cookie values

// of every inbound Response. The Jar is consulted for every

// redirect that the Client follows.

//

// If Jar is nil, cookies are only sent if they are explicitly

// set on the Request.

Jar CookieJar

// Timeout specifies a time limit for requests made by this

// Client. The timeout includes connection time, any

// redirects, and reading the response body. The timer remains

// running after Get, Head, Post, or Do return and will

// interrupt reading of the Response.Body.

//

// A Timeout of zero means no timeout.

//

// The Client cancels requests to the underlying Transport

// as if the Request's Context ended.

//

// For compatibility, the Client will also use the deprecated

// CancelRequest method on Transport if found. New

// RoundTripper implementations should use the Request's Context

// for cancelation instead of implementing CancelRequest.

Timeout time.Duration

}

//中间件样例

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

proxy := func(_ *http.Request) (*url.URL, error) {

return url.Parse("target ip:port")//127.0.0.1:8099

}

transport := &http.Transport{

Proxy: proxy,

DialContext: (&net.Dialer{

Timeout: 30 * time.Second,

KeepAlive: 30 * time.Second,

DualStack: true,

}).DialContext,

MaxIdleConns: 100,

IdleConnTimeout: 90 * time.Second,

TLSHandshakeTimeout: 10 * time.Second,

ExpectContinueTimeout: 1 * time.Second,

MaxIdleConnsPerHost: 100,

}

client := &http.Client{Transport: transport}

url := "http://" + r.RemoteAddr + r.RequestURI

req, err := http.NewRequest(r.Method, url, r.Body)

//注: 设置Request头部信息

for k, v := range r.Header {

for _, vv := range v {

req.Header.Add(k, vv)

}

}

resp, err := client.Do(req)

if err != nil {

return

}

defer resp.Body.Close()

//注: 设置Response头部信息

for k, v := range resp.Header {

for _, vv := range v {

w.Header().Add(k, vv)

}

}

data, _ := ioutil.ReadAll(resp.Body)

w.Write(data)

})

httpcline转发_go http请求转发相关推荐

  1. python做请求转发_RequestDispatcher实现请求转发

    当一个 Web 资源收到客户端的请求后,如果希望服务器通知另外一个资源处理请求,那么这时可以通过 RequestDispatcher 接口的实例对象实现.ServletRequest 接口中定义了一个 ...

  2. java请求转发实例_Servlet请求转发的步骤和实例

    请求转发 一次请求Servlet对应的request对象,在此request中存储数据,可以在此request对象中取出:但是在另一次请求Servlet对应的request对象,是没有第一次请求时在r ...

  3. 015_请求转发和重定向

    一. 重定向和转发工程 1. 新建一个SendRedirectForward的Web工程 2. 在WebContent下新建index.html和success.html 3. 编写index.htm ...

  4. 【相对/绝对路径】JavaWeb项目中,请求转发与重定向的路径写法

    相对路径.全路径 是要不以/开头,都是相对路径.相对路径是从当前资源出发,去寻找其他资源. 只要路径中以/开肉,就是全路径.全路径是从项目根目录出发,去寻找其他资源. 在开发中,写文件路径时,最好使用 ...

  5. 【Servlet】请求转发与重定向

    重定向 重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果,客户端浏览器地址栏变为新请求地址. 一次重定向过程存在两次请求和两 ...

  6. Servlet之请求转发和响应重定向

    多个servlet之间的跳转有两种方式: 请求转发:request.getRequestDispatcher("转发路径").forward(request, response); ...

  7. 分析:重定向和请求转发

    分析:重定向和请求转发 重定向 HttpServletResponse对象的sendRedirect(java.lang.String location)方法称作重定向. 如果location地址前面 ...

  8. Servlet学习笔记(四)之请求转发与重定向(RequestDispatcher与sendRedirect)

    ServletContext可以实现请求转发(ServletContext请求转发相关内容见之前博客:http://blog.csdn.net/megustas_jjc/article/details ...

  9. 请求转发(Forward)和重定向(Redirect)的区别

    转载于昊子豪的博客 请求转发(Forward)和重定向(Redirect)的区别 forward(转发): 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些 ...

最新文章

  1. alert(1) to win 16
  2. 网络编程中的注意问题
  3. linux 性能测试iostat,Linux性能分析之二(iostat)
  4. Python——为什么要在意:模块重载
  5. sencha touch 入门学习资料大全
  6. SWT中嵌入Swing的JTextFeild却不能编辑
  7. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格渲染器和过滤器Mesh renderers and filters...
  8. SkewTransform
  9. Docker技术入门与实战(第2版)2.5 本章小结
  10. FinsTCP协议的Java Socket
  11. 浙江卫视的万峰纯粹一烂人
  12. 水星路由器wan口ip显示0_路由器wan口ip地址显示0.0.0.0怎么办(2)
  13. 网易云课堂Web安全工程师课程分享——第二章 Web开发基础知识
  14. Spring框架学习路线
  15. 显示技术全倒装COB小间距LED与正装COB小间距的优势对比。
  16. JQuery序列化和反序列化
  17. 考研英语 - word-list-37
  18. 评价指标(metrics)
  19. 疯狂的母牛,对方程的求解,不要62(不吉利数字),回文串,进制转换以及空心三角形
  20. css零到一基础教程042:CSS 谷歌字体

热门文章

  1. python fun函数、求4x4整型数组的主对角线元素的和_python中多维数组中列major的numpy整形...
  2. java定时器检测状态_java 定时检测服务器端口状态方法(一)
  3. php检查函数是否存在,php判断类是否存在函数class_exists用法分析
  4. php要懂函数吗,九个你需要知道的PHP函数和功能
  5. c语言延时系统,基于VB的单片机C语言延时程序各参数计算系统
  6. go字符串转byte_go语言学习-基本数据类型
  7. delphi 线程安全list_Java的中的集合(容器)-List
  8. 统计5个字符串回文个数c语言,第一章 字符串 – 1.5 最长回文子串 - 编程之法:面试和算法心得...
  9. 计算机图形图像项目教程素材,案例任务驱动法在图形图像教学中的运用
  10. php设置外键约束,关于php:禁用教义外键约束