【转载】http proxy原理

最近使用Charles抓https包时,发现get和post方式的请求都能抓到,可是method为connect的就是抓不到。并且提示以下:web

You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.缓存

因而搜索connect方式与其余方式区别,才发现问题。如下内容系转载。服务器

 

***如下内容系转载***网络


 

connect方法
http 1.1定义了8种方法,connect为其中之一,HTTP/1.1协议中预留给可以将链接改成管道方式的代理服务器。一般用于SSL加密服务器的连接(经由非加密的HTTP代理服务器)。
并不是全部的http隧道支持connect方法,Http隧道分为两种:
1  不使用CONNECT的隧道
不使用CONNECT的隧道,实现了数据包的重组和转发。在Proxy收到来自客户端的Http请求以后,会从新建立Request请求,并发送到目标服务器,。当目标服务器返回Response给Proxy以后,Proxy会对Response进行解析,而后从新组装Response,发送给客户端。因此,在不使用CONNECT方式创建的隧道,Proxy有机会对客户端与目标服务器之间的通讯数据进行窥探,并且有机会对数据进行串改。

2  使用CONNECT的隧道
而对于使用CONNECT的隧道则不一样。当客户端向Proxy发起Http CONNECT Method的时候,就是告诉Proxy,先在Proxy和目标服务器之间先创建起链接,在这个链接创建起来以后,目标服务器会返回一个回复给Proxy,Proxy将这个回复转发给客户端,这个Response是Proxy跟目标服务器链接创建的状态回复,而不是请求数据的Response。在此以后,客户端跟目标服务器的全部通讯都将使用以前创建起来的创建。这种状况下的Http隧道,Proxy仅仅实现转发,而不会关心转发的数据。这也是为何在使用Proxy的时候,Https请求必须首先使用Http CONNECT创建隧道。由于Https的数据都是通过加密的,Proxy是没法对Https的数据进行解密的,因此只能使用CONNECT,仅仅对通讯数据进行转发。
注意,proxy代理的是客户端发起的TCP链接,如下是wiki的解释                            
the client, using the "CONNECT" HTTP method, asks an HTTP Proxy server to forward the TCP connection to the desired destination. The server then proceeds to make the connection on behalf of the client. Once the connection has been established by the server, the Proxy server continues to proxy the TCP stream to and from the client. Note that only the initial connection request is HTTP - after that, the server simply proxies the established TCP connection.This mechanism is how a client behind an HTTP proxy can access websites using SSL (i.e. HTTPS).
http://en.wikipedia.org/wiki/HTTP_tunnel 


与proxy相关字段
X-Forwarded-For(XFF)是用来识别经过HTTP代理或负载均衡方式链接到Web服务器的客户端最原始的IP地址的HTTP请求头字段;  Squid 缓存代理服务器的开发人员最先引入了这一HTTP头字段,若是没有XFF或者另一种类似的技术,全部经过代理服务器的链接只会显示代理服务器的IP地址(而非链接发起的原始IP地址),这样的代理服务器实际上充当了匿名服务提供者的角色,若是链接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增长。
X-Forwarded-HostX-Forwarded-Proto分别记录客户端最原始的主机和协议。
Proxy-Authorization:链接到proxy的身份验证信息
Proxy-connection:它不是标准协议的一部分,标准协议中已经存在一种机制能够完成此协议头的功能,这就是Connection头域,与Proxy-Connection头相比,Connection协议头几乎提供了相同的功能,除了错误部分。并且,Connection协议头可用于任意链接之间,包括HTTP服务器,代理,客户端,而不是像Proxy-Connection同样,只能用于代理服务器和客户端之间。并发



http 1.1其他7种方法
OPTIONS:这个方法可以使服务器传回该资源所支持的全部HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,能够测试服务器功能是否正常运做。
HEAD:与GET方法同样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部份。它的好处在于,使用这个方法能够在没必要传输所有内容的状况下,
就能够获取其中“关于该资源的信息”(元信息或称元数据)。
GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不该当被用于产生“反作用”的操做中,例如在Web Application中,其中一个缘由是GET可能会被
网络蜘蛛等随意访问。
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会建立新的资源或修改现有资源,或两者皆有。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
http://zh.wikipedia.org/zh-cn/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE
 
相关文章
相关标签/搜索