代理服务器是HTTP协议中一个重要的组件,发挥着重要的做用。 关于HTTP代理的文章有不少,本文再也不赘述,若是不清楚的能够看一下 HTTP代理的基础知识。html
本文主要介绍代理的事例,分析一个真实的案例来帮助理解HTTP代理的原理。python
下面分析一个 http://iflow.uczzd.cn/iflow/api/v1/client_event?app=uc-iflow...
通过代理服务器的HTTP请求。 iflow.uczzd.cn
的公网IP是140.205.136.82
(各地测试到的IP有可能不一样),个人局域网IP是192.168.100.115
,代理服务器的IP是192.168.16.35
。web
再简单说一下HTTP请求的流程: 192.168.100.115
向140.205.136.82
发送HTTP请求,其中192.168.16.35
是代理服务器。api
经过网络监控获取到的HTTP请求以下:服务器
能够看到在网络监控中,有两个HTTP请求,一个是向代理服务器发送的HTTP,另外一个是代理服务器想目标服务器发送的HTTP请求。这两个请求的请求体是同样的,以下图:网络
客户端向代理服务器发送的HTTP报文:app
代理服务器想目标服务器发送的HTTP报文:测试
能够看到,两张图片的HTTP报文是相同的(也有可能Header不一样),咱们能够推测出客户端和代理服务器的处理流程,以下:spa
客户端的处理流程:代理
代理服务器的处理流程:
在推测出客户端和代理服务器的处理逻辑后,咱们须要验证咱们的推测是否正确。
咱们能够构造一个TCP请求,客户端链接到代理服务器,发送HTTP报文,报文的内容是客户端直接发送到服务器的内容。
例如:直接访问 http://www.cnblogs.com/tgwang/
的HTTP报文是:
GET http://www.cnblogs.com/tgwang/ HTTP/1.1 Host: www.cnblogs.com Connection: close Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 Referer: http://www.cnblogs.com/ Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8 Cookie: *** If-Modified-Since: Sat, 30 Jan 2016 02:48:23 GMT
咱们构造一个TCP请求,链接代理服务器,报文的内容也是发送上面的报文,看代理服务器可否正常请求博客园的数据,若是能够正常请求,说明咱们对于客户端和代理服务器推测是正确的,若是没有请求博客园数据,而是返回代理服务器的相关信息,表示推测错误。
下面我使用python向代理服务器127.0.0.1:8888
发送一个TCP请求,为了在代理服务器中能找到此请求,我在Header中增长了一个Token,使用UUID标识(见红框)。
运行程序,发送TCP请求,报文以下:
查看代理服务器的信息,可知,HTTP请求正常发送到博客园,而且正常响应,以下图:
到此推测验证完成,符合预期结果。
书本上的理论看多了,就觉得本身看懂了,然而咱们真的懂了吗?没动手实践过能算是懂了吗
转:https://www.cnblogs.com/tgwang/p/5170480.html