技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> 关于http代理

关于http代理

浏览:3300次  出处信息

缘起

   http代理时,域名解析发生在client端还是代理服务器端?

情形1:

  • 不需要connect方法,显然(不显然吗)这种方式只支持http的情况,不支持https的情况

  • 域名解析发生在代理服务器上

  • 事实上,如果访问的是https的地址,自然会通过使用connect方法的方式实现

    情形2:

  • 使用connect方法 (通过给curl添加 -p 参数实现, 这应该是比较常见和通用的办法)

  • 域名解析发生在代理服务器上

  •    

       下面我们看看Golang中关于代理的实现,重点关注域名解析发生在了哪里:

       golang代码:

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net"
        "net/http"
        "os"
        "time"
    )
    
    func main() {
        get()
    }
    
    func get() {
        url := "http://baidu.com/"
        if len(os.Args) > 1 {
            url = os.Args[1]
        }   
        res, err := http.Get(url)
        check_fail(err)
        defer res.Body.Close()
        body, err := ioutil.ReadAll(res.Body)
        check_fail(err)
        fmt.Println(string(body))
    }

       通过环境变量设置代理:

    export http_proxy=http://10.79.80.245:8888
    export https_proxy=http://10.79.80.245:8888

    http请求:

  • 和curl实现一致

  • 域名解析发生在代理服务器上

  •    

    https请求:

  • 和curl实现一致

  • 域名解析发生在代理服务器端

  • 意外发现: golang关于https请求的实现中,代理的connect和后续的数据交互发生在不同的线程中(看pid就能知晓)

  •    

       

建议继续学习:

  1. HTTPS, SPDY和 HTTP/2性能的简单对比    (阅读:15878)
  2. 浅析http协议、cookies和session机制、浏览器缓存    (阅读:15759)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情?    (阅读:14461)
  4. HTTP协议Keep-Alive模式详解    (阅读:10586)
  5. 让安卓手机通过代理翻墙的方法    (阅读:7133)
  6. 关于 SOCKS 代理的远端 DNS 解析    (阅读:6393)
  7. 各种浏览器审查、监听http头工具介绍    (阅读:6214)
  8. nginx中对http请求处理的各个阶段分析    (阅读:6029)
  9. nginx上,http状态200响应,PHP空白返回的问题    (阅读:5482)
  10. 你不知道的 HTTP    (阅读:5342)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1