粘性会话
粘性会话要求代理服务为相关请求保持一个出口 IP。只要分配仍有效且出口仍可用,应用就可以通过该地址打开页面、发送数据并接收结果。任务结束后,应用可以为下一项任务启动独立会话。
这通常是访问轮换 IP 池的一种模式。更全面的比较见静态代理与轮换代理。本文关注如何为一项任务保持地址、分配持续多久,以及什么可能中断它。
服务如何保持所选 IP
服务需要识别哪些连接属于同一任务。常见方法是在代理设置中加入会话标识符。首次连接时,服务选择出口并将其关联到该标识符。之后使用相同会话设置的连接,只要会话仍有效,就会使用已分配出口。
例如,浏览器测试使用会话名称 task1。首次连接获得示例出口 IP 198.51.100.27。通过同一有效分配打开下一页、提交表单时,也使用该地址。名称标识的是分配关系,并不包含 IP 编码,也不会永久保留它。
会话标识符可以添加到代理用户名中、通过 API 选择,或由配置好的端口表示。有些服务还提供无需单独名称的默认会话。这些都是管理分配的不同方式,因此粘性访问没有通用的用户名格式或端口号。
粘性会话可以覆盖多条网络连接。这与仅仅复用一条已打开连接不同:同一条普通 TCP 连接内的请求,本来就会保持其出口 IP。要确认会话是否能跨连接保持地址,关键是观察以相同会话设置打开新连接时会发生什么。
何时多个请求需要一个 IP
多步骤浏览器测试就是明确的例子:先登录,再打开设置页、提交修改并检查结果。保持源 IP 稳定,可以消除测试中不必要的变化,尤其当网站将地址作为会话检查的一项依据时。
购物或预订测试也可能依赖一致的区域体验。应用通过同一出口搜索、选择选项,并检查下一阶段。这有助于保持各步骤间的网络位置一致,尽管网站也可能根据账户设置、配送信息或 Cookie 决定显示内容。
另一种场景是连续调用 API,目标服务要求相关操作来自一致的源地址。分配应覆盖整个序列,包括暂停和重试。相比之下,不相关的公共页面查询不一定需要同一个 IP。任务需要连续性时,保持地址才有用;它本身不会改善地址信誉,也不保证网站接受请求。
代理会话不会维持网站登录状态
代理服务控制出口地址。网站控制自己的会话:登录状态、购物车或表单填写进度。浏览器或 HTTP 客户端通常通过 Cookie 或身份验证令牌携带这些状态。两套系统都可能使用“会话”一词,但保存的信息不同。
因此,出口 IP 保持不变时,登录仍可能过期。清除 Cookie 也可能让网站无法再识别用户,但不影响代理分配。反过来也可能发生:IP 变化后,网站仍可能接受有效登录。具体行为取决于网站自身规则。
HTTP 库中的会话对象,通常保存 Cookie 并复用连接。创建该对象,并不会自动在代理服务上启用粘性访问。完整工作流程需要应用同时维护网站状态和预期的代理分配。如果不同任务不能共享 Cookie,仍需要使用独立浏览器配置文件或隔离的客户端状态。
会话时长究竟意味着什么
两种计时器都可能被称为会话时长。固定有效期限制分配从起点开始能够存在多久;空闲超时限制最后一次符合条件的请求之后可以暂停多久。新请求可以重启空闲计时器,但不会延长另行设置的固定有效期。
| 限制 | 什么启动倒计时 | 再次请求的作用 |
|---|---|---|
| 固定有效期 | 按服务定义,从创建分配或首次使用开始 | 原过期时间保持不变 |
| 空闲超时 | 从上次请求,或服务认可的其他活动开始 | 请求符合活动条件时,重新启动空闲倒计时 |
以两个限制均为十分钟的示例会话为例。两者都在 14:00 开始,并在 14:08 收到另一个请求。固定有效期的截止时间仍是 14:10;空闲超时则因该请求将空闲截止时间推迟到 14:18。因此,相同的标称时长,在活跃任务中可能产生非常不同的行为。
服务可以同时执行这两种限制。此时,任一限制达到,分配就会结束。常规默认值也可能不同于设置中允许的最长时长。持续发送流量可能避免空闲过期,但不能消除另行设置的最长有效期。
过期意味着与旧出口的分配关系结束。即使会话名称相同,后续连接也可能获得另一个地址。服务可能允许已打开的连接完成,也可能将其关闭。计时器不会把尚未完成的 TCP 交互转移到不同 IP。
应选择覆盖整个任务、慢响应和预期暂停的时间窗口。如果在旧分配即将结束时启动新流程,剩余时间会短于配置时长所暗示的时间。仅为保持空闲会话而发送的请求,也仍是真实流量,可能计入服务的请求或流量额度。
隔离并行任务
当各项独立任务都需要稳定地址时,为每项任务分配自己的会话标识符,并在所有步骤中保持它。加载下一页的进程应复用任务会话,而不是每次请求都生成新名称。同一任务内的重试,也不应悄然切换到无关的代理设置。
假设两个浏览器测试同时运行。第一个使用 task1,第二个使用 task2,并各自保持独立 Cookie。如果给两个测试分配相同会话名称,在其他设置也相同时,就相当于要求服务共享一次分配。打开一个普通新标签页,本身不会创建独立代理设置或独立 Cookie 存储。
不同标识符请求的是独立分配,但并不普遍保证不同出口 IP。服务是否承诺地址不同,是另一项产品属性。粘性访问也不会让出口由你的账户独享:如果地址属于共享池,其他客户仍可以使用。
如果服务支持,多条连接可以同时使用同一个会话。它们共享出口,并继续受账户连接数和用量限制约束。更多会话名称不会提高这些限制。完整运行前,应同时检查并行任务数量,以及每项任务打开的连接数量。
地址为什么可能比预期更早变化
有效的计时器无法让不可用的出口继续工作。住宅设备可能离线,移动连接可能获得不同公网 IP,服务器也可能变得不可达。请求的时长描述分配的时间规则,本身并不保证原出口始终可用。
失去出口后,可能有两种响应。服务可以选择替代出口,让后续请求继续;也可以返回错误,保持必须使用原出口的要求。有些产品允许你选择。自动替换优先保证还能建立下一条连接;返回错误则让应用有机会在换地址继续之前停下来。
名称未变,并不能证明其余会话设置也未变。转到另一个网关或更改国家筛选条件,可能创建不同分配。具体范围取决于服务:会话可能属于特定账户、产品或入口服务器,而不是只要同名就能随处使用。
任务中途地址变化后,接下来要决定如何处理任务状态。只读步骤可能可以安全重试。提交订单或修改数据的操作则要更谨慎:响应丢失,并不能证明操作失败。通过另一个出口重启或继续之前,应先确认哪些操作已经完成。
何时暂时的连续性就已足够
如果任务有明确起止,且仅在这次运行中需要一个 IP,粘性访问就很适合。应测试三点:分配能否跨越预期暂停、能否覆盖整个任务,以及失去出口时的处理是否符合要求。测试应包括正常暂停后建立新连接;在一条已打开连接中的活动,并不能证明分配会延续到下一条连接。
如果相同地址必须持续保留在服务器允许访问列表中,或明天仍需再次使用,应选择为此提供固定分配的服务。粘性会话过期后复用名称,并不能可靠地找回原地址。暂时保持地址与长期分配 IP,解决的是不同的连续性要求。
