为什么需要使用HTTP代理?

既然你都来到这儿了,相信你肯定是在写爬虫。

如果你所爬的网站不愿意让你采集数据,那么在后端程序员眼中,能够作为判断依据的,都有哪些数据呢?

  • IP协议:客户端IP地址、端口号

  • HTTP协议:X-Forward-For头、User-Agent头、Referer、URL、URL参数

从某种角度上说,没有什么数据是无法伪造的但伪造数据是有成本的。爬虫和反爬与其说是在技术上做对抗,不如说是在成本上做对抗

这些数据哪个伪造成本是最高的? IP地址。

为什么IP地址难以伪造?

首先,对于IP协议层,IP地址是可以伪造的,只需要在发包的时候修改源IP就可以了。

这也是SYN-Flood DDoS攻击时,攻击方经常采取的策略。

可是与UDP协议不同,HTTP协议所依赖的TCP协议是需要双向通信的

想象一下,你写信填写一个假的发件人地址,对方收到这个信之后,通过你的发件人地址来回信,那么你肯定无法接到回信。

无法建立双向通信, 就无法建立TCP连接,也就无法产生一个有效的HTTP请求。

什么是HTTP代理?

既然IP地址无法伪造,那么我是否可以利用中间人转发的方式隐藏我的真实IP来源?

当然可以。

让我们想象一下,假设你的女朋友因为生气不理你了,拉黑了你的微信,那你怎么向他认错?

你肯定不假思索的说,当然是通过她的闺蜜帮你转达啦。

那在爬虫系统中,HTTP代理所起的作用,和闺蜜的作用是一样的。

它的原理说起来简单的不能再简单:接受你的HTTP请求,再把你的HTTP请求发送出去,那么在被爬网站看来,这个请求不是你发出的,而是代理服务器发出的。

这就好比,你生气的女朋友会拉黑你,但是她不会拉黑她的闺蜜,所以你的信息可以兜兜转转发给你的女朋友,是一样一样的。

HTTP代理的协议是否有标准?

HTTP代理的定义早在HTTP协议设计之初,就已经被大佬们考虑在内了。

根据IETF协会的RFC7230 2.3节,代理的定义有以下三种

  • 代理(Proxy)

一种由客户端选择的报文转发代理(message-forwarding agent)。按照一定规则让请求通过同一个中转。

  • 网关(Gateway)

又称为反向代理(Reverse Proxy)。对于出站连接来说,网关就像是源服务器。经常被用于拦截不被信任的服务、提高服务器性能、负载均衡等等。

  • 隧道(Tunnel)

通常被用于建立一条虚拟的连接。通过这条连接的报文不会发生变化。

  • 透明代理(Transparent Proxy)

不是由客户端选择的代理。例如在路由器上建立代理,电脑的浏览器感知不到这个代理。

在HTTP代理的类型中,我们实现了哪种代理?

我们实现了代理(Proxy)和隧道(Tunnel)。

其中,代理(Proxy)用来实现HTTP协议转发,隧道(Tunnel)用来实现HTTPS协议的转发。

为什么需要有两种方式转发HTTP协议和HTTPS协议?

我们将会在未来的文章(HTTP代理的安全性问题)中详细说明。

结论

在这篇文章中,我们详细解释了为什么需要使用HTTP代理的原因、什么是HTTP代理和HTTP代理的工作原理。在1997年定义的HTTP代理协议,截止到2022年,仍然是最流行的IP地址隐藏方式,因为它在设计之初就已经考虑得十分周全,它还将继续在爬虫系统中扮演重要角色。

最后说一下队友写的2808Proxy使用Golang实现了完整的HTTP代理协议,在我们的实际测试中,它可以在带宽允许的情况下稳定地实现单机百万并发,为爬虫系统提供了坚实保障。

什么是HTTP代理?相关推荐

  1. Web项目使用nginx实现代理端口访问,看这篇就够了

    在搭建服务器的时候,项目部署在tomcat上,要访问项目,则需要加上端口号,如何隐藏端口号来访问呢,这就用到了nginx. nginx可以在docker上安装,也可以在linux上安装,这里我建议使用 ...

  2. RabbitMQ 入门系列(2)— 生产者、消费者、信道、代理、队列、交换器、路由键、绑定、交换器

    本系列是「RabbitMQ实战:高效部署分布式消息队列」和 「RabbitMQ实战指南」书籍的读书笔记. RabbitMQ 中重要概念 1. 生产者 生产者(producer)创建消息,然后发送到代理 ...

  3. 【Spring】通过动态代理改进银行转账事务控制

    前情 银行转账的案例中,通过给业务层实现类中每个方法中通过事务控制方法添加事务控制,保证每个方法在执行时只有一个数据库连接,通过事务保证整个方法要成功全部成功,要失败都失败. 问题 业务层实现类添加事 ...

  4. 【spring】动态代理

    代理 动态代理 特点:字节码随用随创建,随用随加载 作用:不修改源码的基础上对方法增强 分类:基于接口的动态代理.基于子类的动态代理 基于接口的动态代理: 涉及的类:Proxy     提供者:JDK ...

  5. GOF23设计模式(结构型模式)代理模式~

    代理模式应用场景十分广泛,随便一个框架都会用到,因此学好代理模式对后续框架学习是最基本的要素!!今天我们就来讲讲代理模式! 目录 1.简介 1. 核心作用 2. 角色分析 2. 应用场景 4. 分类 ...

  6. 定制语音代理(智能体)的背后是什么?

    定制语音代理(智能体)的背后是什么? What's behind the move to custom voice agents? 自动化是未来的发展方向.生活在一个现在的时代,希望所有的事情都能迅速 ...

  7. Python使用Redis实现IP代理池

    可以使用快代理,芝麻代理,蘑菇代理 ,讯代理等代理商提供API代理IP或者免费代理建立自己IP代理池 #使用apscheduler库定时爬取ip,定时检测ip删除ip,做了2层检测,第一层爬取后放入r ...

  8. Python 代理爬取网站数据

    代理IP通过https://www.kuaidaili.com/free/ 获取,我使用的的是http 协议的代理.根据自己需求选择http或者https 协议的页面. 访问量会有增长,但效果不是非常 ...

  9. (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!

    一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A ...

  10. Java动态代理和静态代理区别

    静态代理 package staticproxy;/*** 接口* @author newtouch**/ public interface IHello {public void sayHello( ...

最新文章

  1. 星尘小组第八周翻译-数据页和数据行
  2. java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园
  3. Centos npm 安装JDK及配置环境变量
  4. linux 在文件中增加空行,linux – 在不同组的行之间添加空行
  5. 《深度学习笔记》——loss函数的学习笔记
  6. 解决ssh登录慢,等待时间长的问题
  7. 迭代器,生成器,三元表达式,列表解析式
  8. GBK 与GB2312 互查 区位码
  9. Windows 4K低延时H265/H264硬编码直播
  10. 126邮箱手机登录服务器密码怎么办,魅族手机登录网易126邮箱提示账号密码或协议设置不正确解决办法...
  11. Jenkins - Update information obtained: 不可用 ago;
  12. 《SPSS统计分析与行业应用实战》之房地产业中的应用
  13. 2019秋季PAT甲级题解
  14. 分享六款原型设计软件,交流协作更便捷
  15. logisim 快速加法器设计实验报告_华中科技大学数字逻辑实验
  16. Java学习第一周(2.20~2.24)
  17. 【转载】面向对象编程的弊端是什么?
  18. abaqus基于已有模型仿真
  19. Eclipse 导入工程乱码的问题之解决方法
  20. 国家知识产权局一行走访易保全调研区块链,提升相关专利审查工作质效

热门文章

  1. 算法学习之投票算法以及对应leetcode题目
  2. 2022年最新二手苹果手机价格表
  3. Python—Pytest+Allure定制报告
  4. pygame游戏素材预处理
  5. 安徽计算机在职研究生学校,安徽能读在职研究生有哪几个学校
  6. 知识图谱学习笔记(三)——知识表示方法
  7. vue中数字转金额格式
  8. 【Windows】电脑清理个人隐私数据信息
  9. 免费云服务器获取方法 云服务器购买
  10. 《伯克毕生发展心理学3》