400-998-9776转2 服务时间:周一至周日 9:00-23:00 注意:本站不提供境外服务本站不提供境外服务

返回

http代理ip的使用介绍

发布时间:2019-12-16 15:21:50 来源:IP精灵

  http代理是很多人在咨询IP精灵客服的时候,会购买的一种代理服务。那么,在这种协议之下的ip代理,是怎么工作的呢?下面我们来看看具体的介绍。

http代理ip的使用介绍

  http代理ip的使用是怎么实现的?


  浏览器与代理进行 TCP 握手之后,发起了 CONNECT 请求,报文起始行如下:


  CONNECT imququ.com:443 HTTP/1.1


  对于 CONNECT 请求来说,只是用来让代理创建 TCP 连接,所以只需要提供服务器域名及端口即可,并不需要具体的资源路径。代理收到这样的请求后,需要与服务端建立 TCP 连接,并响应给浏览器这样一个 HTTP 报文:


  HTTP/1.1 200 Connection Established


  浏览器收到了这个响应报文,就可认为到服务端的 TCP 连接已经打通,后续直接往这个 TCP 连接写协议数据就可以了。通过 Wireshark 的 Follow TCP Steam 功能,可以清楚地看到浏览器和代理之间的数据传递:


  可以看到,浏览器建立到服务端 TCP 连接产生的 HTTP 往返,完全是明文,这也是为什么 CONNECT 请求只需要提供域名和端口:如果发送了完整 URL、Cookie 等信息,会被中间人一览无余,降低了 HTTPS 的安全性。HTTP 代理承载的 HTTPS 流量,应用数据要等到 TLS 握手成功之后通过 Application Data 协议传输,中间节点无法得知用于流量加密的 master-secret,无法解密数据。而 CONNECT 暴露的域名和端口,对于普通的 HTTPS 请求来说,中间人一样可以拿到(IP 和端口很容易拿到,请求的域名可以通过 DNS Query 或者 TLS Client Hello 中的 Server Name Indication 拿到),所以这种方式并没有增加不安全性。


  了解完原理后,再用 Node.js 实现一个支持 CONNECT 的代理也很简单。核心代码如下:


  JSvar http = require(‘http’);


  var net = require(‘net’);


  var url = require(‘url’);


  function connect(cReq, cSock) {


  var u = url.parse(‘http://’ + cReq.url);


  var pSock = net.connect(u.port, u.hostname, function() {


  cSock.write(‘HTTP/1.1 200 Connection Established\r\n\r\n’);


  pSock.pipe(cSock);


  }).on(‘error’, function(e) {


  cSock.end();


  });


  cSock.pipe(pSock);


  }


  http.createServer().on(‘connect’, connect).listen(8888, ‘0.0.0.0’);


  以上代码运行后,会在本地 8888 端口开启 HTTP 代理服务,这个服务从 CONNECT 请求报文中解析出域名和端口,创建到服务端的 TCP 连接,并和 CONNECT 请求中的 TCP 连接串起来,最后再响应一个 Connection Established 响应。修改浏览器的 HTTP 代理为 127.0.0.1:8888 后再访问 HTTPS 网站,代理可以正常工作。


  除了http代理之外,IP精灵还有socks代理、https代理等多种服务,用户可以根据自己的工作要求或是使用用途来选购。