文章目录
- 正向代理
- 反向代理
- 区别与联系:
- 总结
- 代理服务器实现
-
- 正向代理
- 反向代理
正向代理
正向代理是客户端代理,它位于客户端和目标服务器之间。它的作用是保护客户端的隐私和安全。
如我们现在想要访问谷歌,但是由于某些原因,无法直接访问到谷歌,我们可以通过连接一台代理服务器,代理服务将我们的请求提交到谷歌,然后再将谷歌的响应反馈给我们,对于谷歌而言,它只知道有一个请求过来,但是它并不会知道我们是无法直接访问它的。
反向代理
反向代理是服务器的代理,它位于目标服务器和客户端之间。
它的作用是为目标服务器提供服务,例如负载均衡、缓存加速和安全防护。
举例: 比如我们访问百度网站,百度的代理服务器对外的域名为 https://www.baidu.com 。具体内部的服务器节点我们不知道。现实中我们通过访问百度的代理服务器后,代理服务器给我们转发请求到他们N多的服务器节点中的一个给我们进行搜索后将结果返回,此时,代理服务器对我们客户端来说就充当了提供响应的服务器,但是对于目标服务器来说,它只是进行了一个请求和转发的功能。
区别与联系:
正向代理:代理客户端,服务端不知道实际发起请求的客户端。
反向代理:代理服务端,客户端不知道实际提供服务的服务端。
正向代理需要对客户端进行配置,而反向代理对客户端是透明的,不需要进行任何配置
。
总结
正向代理和反向代理都是进行请求和转发的代理方式,但为了区分,后者被称为反向代理。
生活中最常见的例子是正向代理类似于卖票的黄牛,而反向代理类似于出租房的二手东
代理服务器实现
正向代理
按照我们之前介绍的代理原理,我们可以编写出这样的代码:
package main
import (
"fmt"
"io"
"net"
"net/http"
"strings"
)
type Pxy struct {
}
func (p *Pxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
fmt.Printf("Received request %s %s %s\n", req.Method, req.Host, req.RemoteAddr)
transpo