go实现反向代理服务器(附浅拷贝和深拷贝知识点)

概念

正向代理

正向代理是一种客户端代理技术,帮助客户端访问无法访问的服务器资源,可以隐藏客户端的真实ip

反向代理

服务器端的代理技术,帮助服务器负载均衡、缓存、安全校验,可以隐藏服务器的真实ip

正向代理实现

实现原理:正向代理服务器接收到客户端到request请求,把request拷贝为自己的request发送给服务器,并把服务器返回的数据包装给客户端


type Pxy struct {
   
   

}



func (p *Pxy) ServeHTTP(rw http.ResponseWriter,req *http.Request) {
   
   

	fmt.Printf("正向代理接收到请求:%s %s %s\n",req.Method,req.Host,req.RemoteAddr)

	transport:=http.DefaultTransport
	//浅拷贝
	outReq:=new (http.Request)
	*outReq = *req
	if clientIP,_,err :=net.SplitHostPort(req.RemoteAddr); err==nil{
   
   
		if prior,ok:=outReq.Header["X-Forwarded-For"];ok{
   
   
			clientIP = strings.Join(prior,", ")+", "+clientIP
		}
		outReq.Header.Set("X-Forwarded-For",clientIP)
	}

	//把消息利用该正向代理服务器发送给下游
	res,err:=transport.RoundTrip(outReq)
	if err!=nil{
   
   
		rw.WriteHeader(http.StatusBadGateway)
		return
	}

	//把下游得到的数据返回给上游

	//复制头部信息
	for key,value:=range res.Header{
   
   
		for _,v := range value{
   
   
			rw.Header().Add(key,v)
		}

	}
	rw.WriteHeader(res.StatusCode)
	
	io.Copy(rw,res.Body)
	res.Body.Close(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值