C -HTTP代理服务器保持靠值连接支持



我当前正在使用支持靠近连接的多线螺纹代理服务器。我在处理Firefox浏览器的请求时看到了一些奇怪的问题。我使用localhost:10001/http://url连接到本地代理,并且可以访问此主机上的所有链接。该过程如下。1.创建一个插座将其绑定到端口100012.接受连接,以及客户端是否连接叉()3.继续处理客户请求作为持续连接。

现在的问题是,当我在Firefox中打开一个新选项卡以访问使用Localhost的不同主机的第二个URL:10001/http://url2时,奇怪的是,该请求转到我的客户端套接字连接创建在第一个连接期间。我最初认为这可能是由于我的代码造成的,但是后来我尝试使用Telnet进行相同的操作,所有新连接都会创建一个单独的过程。是否有任何特定的设置使Firefox浏览器执行此操作?

http keep-alive是一种重用多个请求的基础TCP连接的方法,以便可以一直跳过始终创建新的TCP连接的开销。由于连接的目标在您的情况下一直是相同的,因此浏览器重复使用相同的TCP连接是有意义的。与telnet的比较是有缺陷的,因为与telnet,您一直在进行新的TCP连接。

如果使用HTTP Keep-Alive使用,则HTTP版本指定了连接标头以及服务器和客户端的行为。服务器和客户端都可以决定在完成请求后的任何时间关闭空闲连接,即在请求完成后不需要将其保持打开状态。此外,他们可以通过使用Connection: keep-alive HTTP标头来表示他们喜欢打开连接,或者他们喜欢在请求后使用Connection: close关闭。这些标头具有默认值,具体取决于HTTP版本,即,除非明确指定,否则使用http/1.0时,请使用HTTP/1.1。

除此之外,您正在使用URL(例如http://proxy/real-url)实现的"代理"不是真正的HTTP代理。真正的HTTP代理将被配置为浏览器内部的代理,并且您使用的URL将保持不变,这也意味着代理不需要RERL重写。更糟糕的是,您对代理人的想法有效地合并了同一来源中的所有主机(即原点是代理),因此有效地禁用了浏览器的主要安全概念:同一原始策略。例如,这意味着某些Rogue广告服务器将与您的实现与eBay共享,因此可以访问eBay cookie并劫持会话并滥用它以盗窃身份

http持续连接也与代理一起使用,不仅与目标。

对于Firefox,您可以尝试通过将网络设置为 1.0来改变代理的行为。但是,您必须增强您的代理(也许可以完全重新考虑其内部工作),以便能够处理这些重复使用的连接。我确定它不仅限于Firefox。

还要确保您的代理不会使用http/1.1回答。