使用 Fiddler 强制所有请求通过一个 ServerPipe
Force all requests through one ServerPipe with Fiddler
我正在尝试通过单个 ServerPipe 路由匹配的域请求,
但我无法弄清楚如何让提琴手为所有 ClientPipes
重用该 ServerPipe
基于 chromium 的浏览器的正常行为是为给定域打开最多 6 个到服务器的连接(当有多个资源要获取时)。当通过 fiddler 代理时,这通常会导致最多 6 个 ServerPipes。我想允许第一个建立服务器连接,跳过接下来的 5 个连接,然后让所有客户端请求使用第一个服务器连接。从浏览器的角度来看,它仍然有 6 个客户端连接到 fiddler。
这是我所在的位置 -
- 让第一个
CONNECT
请求正常通过,这会建立与服务器的第一个连接
- 当接下来的 5 个客户端
CONNECT
进来时,在 BeforeRequest
处理程序的会话上设置 x-ReplyWithTunnel
标志。这将绕过创建新的服务器连接,但会像成功建立服务器连接一样响应客户端
- 客户端通过 6 个客户端管道向 fiddler 发送一堆
GET
请求,从服务器请求资源。第一个管道(与实际服务器管道)中的那些完成。
- 其他 5 个隧道中的那些
GET
请求呈现给 fiddler,但没有处理响应并发送回客户端。
我已经尝试了各种想法,但无法让 fiddler 为所有 6 个客户端管道重用单个服务器连接。
所有 GET
请求都发送到同一个域,因此 ServerPipe 重用应该没问题,不是吗?
这可能吗?
如果是,我错过了什么?
经过一番努力终于搞定了。
在幕后,Fiddler 对每台服务器使用一个管道“池”。
在我最初的 post 中,我只允许为每个域创建一个连接。当第一个 GET
进入域时,该会话从池中取出唯一的管道供其使用。当其他 5 个 GET
到达时,他们无法在池中找到任何 Pipes,随后失败。
要解决此问题,需要限制后续的 GET
并且一次只允许它们 运行 一个,一旦每个先前的 GET
完成。
当这个有序的过程发生时,管道将被放回池中,队列中的下一个 GET
将成功找到要使用的管道。然后出现独角兽和彩虹。
我使用 SemaphoreSlim
对每个域 BeforeRequest
中的线程和 BeforeResponse
中的线程进行“排队”。基本功能可以满足我的需要,但完整的实现需要处理失败的管道、挂起 GET 和标志覆盖等问题。
我正在尝试通过单个 ServerPipe 路由匹配的域请求, 但我无法弄清楚如何让提琴手为所有 ClientPipes
重用该 ServerPipe基于 chromium 的浏览器的正常行为是为给定域打开最多 6 个到服务器的连接(当有多个资源要获取时)。当通过 fiddler 代理时,这通常会导致最多 6 个 ServerPipes。我想允许第一个建立服务器连接,跳过接下来的 5 个连接,然后让所有客户端请求使用第一个服务器连接。从浏览器的角度来看,它仍然有 6 个客户端连接到 fiddler。
这是我所在的位置 -
- 让第一个
CONNECT
请求正常通过,这会建立与服务器的第一个连接 - 当接下来的 5 个客户端
CONNECT
进来时,在BeforeRequest
处理程序的会话上设置x-ReplyWithTunnel
标志。这将绕过创建新的服务器连接,但会像成功建立服务器连接一样响应客户端 - 客户端通过 6 个客户端管道向 fiddler 发送一堆
GET
请求,从服务器请求资源。第一个管道(与实际服务器管道)中的那些完成。 - 其他 5 个隧道中的那些
GET
请求呈现给 fiddler,但没有处理响应并发送回客户端。
我已经尝试了各种想法,但无法让 fiddler 为所有 6 个客户端管道重用单个服务器连接。
所有 GET
请求都发送到同一个域,因此 ServerPipe 重用应该没问题,不是吗?
这可能吗?
如果是,我错过了什么?
经过一番努力终于搞定了。
在幕后,Fiddler 对每台服务器使用一个管道“池”。
在我最初的 post 中,我只允许为每个域创建一个连接。当第一个 GET
进入域时,该会话从池中取出唯一的管道供其使用。当其他 5 个 GET
到达时,他们无法在池中找到任何 Pipes,随后失败。
要解决此问题,需要限制后续的 GET
并且一次只允许它们 运行 一个,一旦每个先前的 GET
完成。
当这个有序的过程发生时,管道将被放回池中,队列中的下一个 GET
将成功找到要使用的管道。然后出现独角兽和彩虹。
我使用 SemaphoreSlim
对每个域 BeforeRequest
中的线程和 BeforeResponse
中的线程进行“排队”。基本功能可以满足我的需要,但完整的实现需要处理失败的管道、挂起 GET 和标志覆盖等问题。