何时应该在HTTP代理服务器上使用CONNECT和GET HTTP方法?

Ale*_*dro 52 proxy httpwebrequest http-proxy proxy-server http-request

我正在构建一个WebClient库.现在我正在实现一个代理功能,所以我正在进行一些研究,我看到一些使用该CONNECT方法请求URL的代码.

但是在我的Web浏览器中检查它,它不使用该CONNECT方法,而是调用GET方法.

所以我很困惑.当我应该使用这两种方法?

Ani*_*han 70

CONNECT请求敦促您的代理建立到远程端点的HTTP隧道. 通常它用于SSL连接,但它也可以与HTTP一起使用(用于代理链和隧道的目的)

CONNECT www.google.com:443 
Run Code Online (Sandbox Code Playgroud)

上面的行打开了从您的代理到端口443上的www.google.com的连接.之后,客户端发送的内容将由代理转发到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
Run Code Online (Sandbox Code Playgroud)

  • 一点都不。SSL 可能在不同的端口上运行。端口 443 是 SSL 最常用的端口。`CONNECT` 用于强制代理 HTTPS 请求,也可以将其用于 HTTP,但不是必需的。 (2认同)

kub*_*zyk 52

TL;只有当Web客户端知道它与代理进行通信并且最终的URI开始时,它才使用CONNECT CONNECT.

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

CONNECT www.google.com:443 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

它的意思是:

"嗨代理,请打开一个原始的TCP连接谷歌;我写的任何后续字节,你只是重复这个连接没有任何解释.哦,还有一件事.只有直接与谷歌交谈,但如果你使用另一个代理你自己,而你只是告诉他们一样https://."

请注意这对TLS(https)一无所知.实际上CONNECT与TLS正交; 你可以只有一个,你可以有其他,或者你可以拥有它们.

话虽如此,其目的CONNECT是允许端到端加密的TLS会话,因此数据对代理(或整个代理链)是不可读的.即使代理根本不理解TLS CONNECT也可以工作,因为它可以在普通HTTP中发布,并且只需复制原始字节就可以从代理中获取.

但是与第一个代理的连接可以是TLS(https),但它意味着您和第一个代理之间的流量的双重加密.

显然,CONNECT直接与最终服务器交谈毫无意义.您只需开始讨论TLS然后发出HTTP CONNECT.终端服务器通常GET完全禁用.

对于代理,CONNECT支持会增加安全风险.任何数据都可以通过CONNECT,甚至ssh hacking尝试到192.168.1.*上的服务器,甚至是SMTP发送垃圾邮件.外界将这些攻击视为由代理发起的常规TCP连接.他们不在乎是什么原因,他们无法检查HTTP是否CONNECT应该受到指责.因此,由代理人来确保自己免受滥用.

  • 感谢您的详细回答,它让我确认了一些事情。 (4认同)
  • 这是我在网络上找到的第一个解释,它实际上帮助我理解何时使用 CONNECT 以及为什么使用。谢谢你! (2认同)

ant*_*tix 20

根据经验,GET用于纯HTTP,而CONNECT用于HTTPS

虽然有更多细节,但您可能希望阅读相关的RFC-s

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