代理服务器是HTTP协议中一个重要的组件,发挥着重要的作用。 关于HTTP代理的文章有很多,本文不再赘述,如果不清楚的可以看一下 HTTP代理的基础知识。

本文主要介绍代理的事例,分析一个真实的案例来帮助理解HTTP代理的原理。

HTTP代理的原理

下面分析一个 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

再简单说一下HTTP请求的流程: 192.168.100.115140.205.136.82发送HTTP请求,其中192.168.16.35是代理服务器。

一、 监控请求

通过网络监控获取到的HTTP请求如下:

可以看到在网络监控中,有两个HTTP请求,一个是向代理服务器发送的HTTP,另一个是代理服务器想目标服务器发送的HTTP请求。这两个请求的请求体是一样的,如下图:

客户端向代理服务器发送的HTTP报文:

代理服务器想目标服务器发送的HTTP报文:

二、 推测处理流程

可以看到,两张图片的HTTP报文是相同的(也有可能Header不同),我们可以推测出客户端和代理服务器的处理流程,如下:

客户端的处理流程:

代理服务器的处理流程:

三、 验证推测的处理流程

在推测出客户端和代理服务器的处理逻辑后,我们需要验证我们的推测是否正确。

我们可以构造一个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

转载于:https://www.cnblogs.com/waterBlog/p/10791268.html

浅析HTTP代理原理--转相关推荐

  1. 浅析HTTP代理原理

    代理服务器是HTTP协议中一个重要的组件,发挥着重要的作用. 关于HTTP代理的文章有很多,本文不再赘述,如果不清楚的可以看一下 HTTP代理的基础知识. 本文主要介绍代理的事例,分析一个真实的案例来 ...

  2. 浅析APP代理检测对抗

    声明 出品|先知社区(ID:dummersoul) 以下内容,来自先知社区的dumm-ersoul作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山 ...

  3. nginx反向代理原理讲解

    一 .概述                  反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器:并将从服务器上得到的结果 ...

  4. 深入理解Java Proxy和CGLIB动态代理原理

    点击上方关注,每天进步一点点 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译 ...

  5. Java Proxy和CGLIB动态代理原理

    动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...

  6. Nginx(二):反向代理原理 与 配置文件详解

    相关阅读: Nginx(一):Nginx原理概述 与 安装步骤详解 Nginx(二):反向代理原理 与 配置文件详解 Nginx(三):负载均衡策略 与 Nginx静态服务器 Nginx(四):Ngi ...

  7. CGLib动态代理原理

    CGLib动态代理原理 CGLib动态代理是代理类去继承目标类,然后重写其中目标类的方法啊,这样也可以保证代理类拥有目标类的同名方法: 看一下CGLib的基本结构,下图所示,代理类去继承目标类,每次调 ...

  8. android中多态的应用_动态代理原理及在 Android 中的应用

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:trampcr 链接:https://www.jianshu.com/p/492903ab2fae 声明:本文已 ...

  9. 【java】CGLIB动态代理原理分析

    1.概述 前一篇文章介绍了CGLIB中常用的API,实际上使用了Enhancer和MethodInterceptor之后会生成代理子类,这篇文章就是分析一下CGLIB动态代理的原理. 2.CGLIB动 ...

最新文章

  1. docker 标记和推送镜像
  2. Storm概念学习系列之storm的特性
  3. ADSL掉线解决方法全略
  4. 更好地在云上:物联网,大数据和人工智能
  5. Java进阶之网络编程
  6. 如何设计出令人惊叹的关卡:来自策划、美术与程序的标准
  7. Android 文字转语音之TextToSpeech
  8. java设计模式之解释器模式
  9. 基金投资入门1:基金基础知识介绍
  10. 原生JS实现弹幕效果
  11. C#程序设计第三版(李春葆)第12章文件操作课后习题答案
  12. python文本编辑器_python最好的ide和文本编辑器
  13. discuz X3.2最新20141225安装包uc_server不能登陆问题(包括升级后)
  14. css html制做王者荣耀网站,css3配合js做王者荣耀3D旋转购买英雄效果以及源码展示...
  15. Win11或Win10重置电脑提示“找不到恢复环境”
  16. PHP快速入门(一)
  17. css-样式 transform旋转效果
  18. 可以在xmind上同时有两个大主题吗_教程|如何自定义主题风格?
  19. 最近整理的一些常见的面试题,面试大全,黑马程序员面试宝典题库---数据库--篇
  20. 我就执行一个count(*)为什么这么慢?

热门文章

  1. SAP MM GR/IR Account Maintenance的DEMO
  2. 【Bug Fix】Error : Can#39;t create table #39;moshop_1.#sql-534_185#39; (errno: 150)
  3. mysql事务操作代码_Mysql中事务的使用【mysql】
  4. 使用 Chrome 调试 Vue3 的 TypeScript 源码
  5. 根据key或value将map容器进行排序
  6. mysql 1690_mysql error BIGINT UNSIGNED value is out of range in 解决办法
  7. mybatis-plus超详细讲解
  8. Unity跨iOS、Android平台使用protobuf-net的方法
  9. DXUT框架剖析(3)
  10. cfile file 读写最大文件_java的IO字节流复制文件对比(2)