[功能介绍]http代理的使用介绍

发布时间:2020-06-20 关注热度:°C

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

httpip代理的使用介绍

  httpip代理的使用是怎么实现的?

 

  浏览器与代理进行 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 ’);

 

  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代理等多种服务,用户可以根据自己的工作要求或是使用用途来选购。

 

版权声明:本文为IP海(iphai.cn)原创作品,未经许可,禁止转载!

Copyright © www.iphai.cn. All Rights Reserved. IP海 版权所有.
IP海仅提供中国内IP加速服务,无法跨境联网,用户应遵守《服务条款》内容,严禁用户使用IP海从事任何违法犯罪行为。
ICP备案鄂ICP备19030659号-3 公安备案鄂公网安备42100302000141号 计算机软件著作权证计算机软件著作权证 ICP/EDI许可证ICP/EDI许可证:鄂B2-20200106

微信扫一扫咨询