美文网首页计算机网络
正向代理与反向代理

正向代理与反向代理

作者: 修行者12138 | 来源:发表于2020-12-12 17:47 被阅读0次

    先说结论,两者最大的区别在于:代理是客户端搭的还是服务端搭的

    比如我要访问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
    

    相关文章

      网友评论

        本文标题:正向代理与反向代理

        本文链接:https://www.haomeiwen.com/subject/nyjpgktx.html