it-swarm.com.de

Wann sollte man bei HTTP Proxy Server die HTTP-Methoden CONNECT und GET verwenden?

Ich baue eine WebClient-Bibliothek auf. Jetzt implementiere ich eine Proxy-Funktion, mache also Nachforschungen und habe Code mit der Methode CONNECT zum Anfordern einer URL gefunden.

Bei der Überprüfung in meinem Webbrowser wird jedoch nicht die CONNECT -Methode verwendet, sondern die GET-Methode aufgerufen.

Also bin ich verwirrt. Wann sollte ich beide Methoden anwenden?

49
Alexsandro

Eine CONNECT-Anforderung fordert Ihren Proxy auf, einen HTTP-Tunnel zum Remote-Endpunkt einzurichten. Normalerweise wird für SSL-Verbindungen verwendet, obwohl es auch mit HTTP verwendet werden kann (für die Zwecke der Proxy-Verkettung und des Tunnelns).

CONNECT www.google.com:443 

Die obige Zeile stellt über Port 443 eine Verbindung von Ihrem Proxy zu www.google.com her. Danach werden vom Client gesendete Inhalte vom Proxy an www.google.com:443 Weitergeleitet.

Wenn ein Nutzer versucht, eine Seite abzurufen http://www.google.com , kann der Proxy in seinem Namen genau dieselbe Anfrage senden und eine Antwort für ihn abrufen.

Bei SSL (HTTPS) verstehen nur die beiden Remote-Endpunkte die Anforderungen, und der Proxy kann sie nicht entschlüsseln. Daher muss nur dieser Tunnel mit CONNECT geöffnet werden, und die beiden Endpunkte (Webserver und Client) können direkt miteinander kommunizieren.

Proxy-Verkettung:

Wenn Sie zwei Proxyserver verketten, ist dies die Reihenfolge der auszuführenden Anforderungen.

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
68

TL; DR Ein Web-Client verwendet CONNECT nur, wenn er weiß, dass er mit einem Proxy kommuniziert und der endgültige URI mit https:// Beginnt.

Wenn ein Browser sagt:

CONNECT www.google.com:443 HTTP/1.1

es bedeutet:

"Hallo Proxy, bitte öffne eine rohe TCP Verbindung zu Google; alle folgenden Bytes, die ich schreibe, wiederholst du einfach ohne Interpretation über diese Verbindung. Oh, und noch eine Sache. Tu das nur, wenn du sprichst um direkt zu googeln, aber wenn Sie selbst einen anderen Proxy verwenden, teilen Sie ihnen stattdessen einfach das gleiche CONNECT mit. "

Beachten Sie, wie dies nichts über TLS (https) aussagt. Tatsächlich ist CONNECT orthogonal zu TLS. Sie können nur eine haben, Sie können andere haben, oder Sie können beide haben.

Abgesehen davon besteht die Absicht von CONNECT darin, Ende-zu-Ende-verschlüsselte TLS-Sitzung zuzulassen, sodass die Daten für einen Proxy (oder eine gesamte Proxy-Kette) nicht lesbar sind. Dies funktioniert auch dann, wenn ein Proxy TLS überhaupt nicht versteht, da CONNECT in einfachem HTTP ausgegeben werden kann und vom Proxy nur das Kopieren von unformatierten Bytes erfordert.

Die Verbindung zum ersten Proxy kann jedoch TLS (https) sein, obwohl dies eine doppelte Verschlüsselung des Datenverkehrs zwischen Ihnen und dem ersten Proxy bedeutet.

Offensichtlich macht es keinen Sinn, CONNECT zu verwenden, wenn Sie direkt mit dem endgültigen Server sprechen. Sie fangen einfach an, TLS zu sprechen, und geben dann HTTP GET aus. Die End-Server deaktivieren normalerweise CONNECT insgesamt.

Bei einem Proxy fügt die Unterstützung von CONNECT Sicherheitsrisiken hinzu. Alle Daten können über CONNECT weitergeleitet werden, sogar ein SSH-Hackversuch an einen Server unter 192.168.1. *, Sogar das Versenden von Spam über SMTP. Die Außenwelt betrachtet diese Angriffe als regelmäßige TCP von einem Proxy initiierte Verbindungen. Es ist ihnen egal, was der Grund ist, sie können nicht prüfen, ob HTTP CONNECT schuld ist. Daher ist es sich gegen Missbrauch abzusichern.

Ja, ich weiß, dass ich das 4 Jahre später beantworte, ich hoffe, dass ich trotzdem mehr Klarheit bringe.

45
kubanczyk

Als Faustregel wird GET für einfaches HTTP und CONNECT für HTTPS verwendet

Da es jedoch weitere Details gibt, möchten Sie wahrscheinlich die relevanten RFCs lesen

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

20
anttix