当一个人应该使用CONNECT和HTTP代理服务器的HTTP GET方法?(When should

2019-06-26 14:48发布

我建立一个Web客户端库。 现在我实现代理功能,所以我做了一些研究,我用看到一些代码CONNECT方法来请求的URL。

但我的Web浏览器中查看它,它不使用CONNECT方法,但调用GET方法来代替。

所以,我很困惑。 什么时候应该使用这两种方法?

Answer 1:

连接请求敦促你的代理服务器建立HTTP隧道远程端点。 通常它用于SSL连接,尽管它可以用HTTP被用作孔(用于代理链接和隧道的目的)

CONNECT www.google.com:443 

上述行打开从代理到www.google.com端口443之后的连接,由客户端发送由代理转发到内容www.google.com:443

如果用户试图检索页面http://www.google.com ,代理可以发送完全相同的请求,并检索响应他,代表他。

使用SSL(HTTPS),只有两个远程端点理解请求,而代理无法破译他们。 因此,它是所有开放使用CONNECT该隧道,并让两个端点(网络服务器和客户端)直接相互交谈。

代理链:

如果您链接2台代理服务器,这是要发出的请求序列。

GET1 is the original GET request (HTTP URL)
CONNECT1 is the original CONNECT request (SSL/HTTPS URL or Another Proxy)

User Request ==CONNECT1==> (Your_Primary_Proxy ==CONNECT==> AnotherProxy-1 ... ==CONNECT==> AnotherProxy-n) ==GET1(IF is http)/CONNECT1(IF is https)==> Destination_URL


Answer 2:

TL; DR的web客户端使用CONNECT只有当它知道它谈论到代理和最终URI开始https://

是的,我4年后回答。 当浏览器说:

CONNECT www.google.com:443 HTTP/1.1

它的意思是:

“嗨代理,请打开原始TCP连接到谷歌,任何后续字节我写的,你只是不断的重复,没有任何解释的连接哦,还有一件事情要做,只有当聊到直接在Google,但如果你使用另一种。代理自己,而不是你只需告诉他们同样的CONNECT “。

请注意这是如何只字未提TLS(HTTPS)。 实际上CONNECT正交于TLS; 你只能有一个,你可以有其他的,也可以让他们两个。

如此说来,的意图CONNECT是允许端至端加密TLS会话 ,所以数据是不可读的代理(或整个代理链)。 它的工作原理,即使代理不明白TLS可言,因为CONNECT可以简单的HTTP内发行,并从代理无非各地复制原始字节更需要。

可是到了第一个代理的连接可以是TLS(HTTPS),尽管这意味着你的第一个代理之间的通信的双重加密。

显然,这是没有意义的CONNECT直接对话最终服务器时。 你刚开始说话TLS,然后发出HTTP GET 。 结束服务器通常禁用CONNECT完全。

一个代理, CONNECT支持增加了安全隐患。 任何数据都可以通过传递CONNECT ,甚至SSH黑客试图在服务器上192.168.1。*,甚至SMTP发送垃圾邮件。 外界认为这些攻击是由代理发起的常规TCP连接。 他们不在乎是什么原因,他们无法检查HTTP是否CONNECT是难辞其咎的。 因此,它是由代理来保护自己免遭滥用。



Answer 3:

作为一个经验GET的规则被用于普通HTTP和CONNECT为HTTPS

还有更多的细节,但这样你可能想阅读相关的RFC-S

http://www.ietf.org/rfc/rfc2068.txt http://www.ietf.org/rfc/rfc2817.txt



文章来源: When should one use CONNECT and GET HTTP methods at HTTP Proxy Server?