http代理详解

作者:IPIDEA

2022-09-27 14:06:43

很多人都在咨询代理IPIDEA客服时,会购买代理ip服务。然后,在这个协议下ip代理是怎么工作的?我们来看看具体的介绍。


http代理详解.png

http代理ip如何实现代理的使用?

浏览器和代理TCP握手后,开始了CONNECT请求,报文起点如下:

CONNECTimququ.com:443HTTP/1.1

对于CONNECT就请求而言,它只是用来创建代理TCP连接,只需提供服务器域名和端口,不需要具体的资源路径。收到此请求后,代理商需要与服务器建立联系TCP连接并响应浏览器HTTP报文:

HTTP/1.1200ConnectionEstablished

当浏览器收到响应报告时,可以认为是服务端TCP连接已经打开,后续直接到这个TCP连接协议数据。Wireshark的FollowTCPSteam该功能可以清楚地看到浏览器和代理之间的数据传输:

浏览器建立在服务端TCP连接产生的HTTP往返,完全是明文,这就是为什么CONNECT如果发送完整,请求只需提供域名和端口URL,Cookie等待信息,会被中间人一目了然,减少HTTPS的安全性。HTTP代理承载的HTTPS流量、应用数据等TLS握手成功后通过ApplicationData协议传输,中间节点无法知道用于流量加密master-secret,数据无法解密CONNECT暴露的域名和端口是普通的HTTPS就请求而言,中间人也可以得到它(IP和端口很容易获得,请求的域名可以通过DNSQuery或者TLSClientHello中的ServerNameIndication因此,这种方法并没有增加不安全性。

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

JSvarhttp=require(‘http’);

varnet=require(‘net’);

varurl=require(‘url’);

functionconnect(cReq,cSock){

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

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

cSock.write(‘HTTP/1.1200ConnectionEstablished’);

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连接起来,最后响应一个ConnectionEstablished响应。修改浏览器HTTP代理为127.0.0.1:8888后再访问HTTPS网站,代理可以正常工作。

除了http代理之外,IPIDEA还有socks代理,https代理,用户可以根据自己的工作要求或用途购买代理等服务。


*ipidea提供的服务必须在境外网络环境下使用

热门资讯