先说结论,两者最大的区别在于:代理是客户端搭的还是服务端搭的
比如我要访问A公司的内网
假设我是访问者,我(客户端)需要自己搭代理(比如VPN),而不是在A公司搭代理(我不是A公司的运维),这个时候就是正向代理;
假设我真的是A公司的运维,我的真实服务器地址在内网,我需要让访问者可以访问我的网站,并且需要实现负载均衡、缓存等功能,那我(服务端)就需要搭代理(比如nginx),这个时候就是反向代理。
image.png正向代理代理了客户端,服务端不知道实际发起请求的客户端是谁;
反向代理代理了服务端,客户端不知道实际提供服务的服务端是谁。
在代码层面的区别
如果是正向代理,需要配置proxy,以httpclient为例
//设置代理IP、端口、协议
HttpHost proxy = new HttpHost("代理的IP", 代理的端口, "http");
//配置代理设置
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setProxy(proxy)
.build();
//实例化CloseableHttpClient对象
CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
//访问目标地址
HttpGet httpGet = new HttpGet("真实服务端地址");
//请求返回
CloseableHttpResponse httpResp = httpclient.execute(httpGet);
......
再以curl为例
curl -v --proxy 代理IP:PORT 真实服务端地址
如果是反向代理,无需配置proxy,而是直接请求反向代理地址,以httpclient为例
//实例化CloseableHttpClient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
//访问目标地址
HttpGet httpGet = new HttpGet("代理的IP:PORT");
//请求返回
CloseableHttpResponse httpResp = httpclient.execute(httpGet);
......
以curl为例
curl -v 代理IP:PORT
网友评论