Was ist der Unterschied zwischen "CONNECT" und "GET HTTPS"?

Bevor ich zur eigentlichen Frage komme, möchte ich erklären, wie mein Projekt funktioniert: Der Einfachheit halber befindet sich mein Proxy auf meinem Laptop, wo sich auch der Client (mein Browser) befindet; Der Remote-Server wird zum Beispiel YouTube sein.

Der Client ist dank des SwitchOmega-Plugins mit einem bestimmten Port des Proxys verbunden: Der Client möchte eine Verbindung herstellen zu www.youtube.com und der Proxy erhält die folgende Anfrage:

CONNECT www.youtube.com:443 HTTP/1.1
Host: www.youtube.com:443
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36

Mir wurde gesagt, dass, wenn ein Proxy eine CONNECT Anfrage erhält, es sollte eine TCP-Verbindung zu IP:Port geöffnet werden, geben Sie eine 200 OK - Nachricht an den Client zurück und senden Sie Daten, bis eine Seite der Verbindung geschlossen ist.

Mit einem anderen Plugin, das HTTP-Anfragen verfolgt, HTTP-Trace, sehe ich eine andere Anfrage in meinem Browser:

GET https://www.youtube.com/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
and other data...

Warum empfängt mein Proxy CONNECT www.youtube.com:443 HTTP/1.1, während der HTTP-Trace GET https://www.youtube.com/ anzeigt? Meinen sie dasselbe?

Author: Journeyman Geek, 2016-03-23

2 answers

CONNECT behandelt die Anfrage

VERBINDEN

Die Verbindungsmethode konvertiert die Anforderungsverbindung in ein transparentes TCP / IP tunnel, normalerweise zur Erleichterung der SSL-verschlüsselten Kommunikation (HTTPS) über einen unverschlüsselten HTTP-Proxy.

Während GET die Daten abruft.

GET

Die Methode GET fordert eine Darstellung der angegebenen Ressource. Anfragen mit GET sollten nur Daten abrufen und sollte haben keine andere Wirkung. (Dies gilt auch für einige andere HTTP-Methoden.) Der W3C hat Leitprinzipien zu dieser Unterscheidung veröffentlicht, sagen, "Web Application Design sollte durch die oben genannten Prinzipien informiert werden, aber auch durch die entsprechenden Einschränkungen."

Quelle - Hypertext Transfer Protocol

 6
Author: Ramhound,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-03-23 17:55:40

Ich denke, Sie haben es mit einem kosmetischen Problem zu tun.

GET https://www.youtube.com/ ist höchstwahrscheinlich genau das, was protokolliert wird, um anzuzeigen, dass das Abrufen mit GET erfolgt und das Ziel https://www.youtube.com ist.

Es gibt keine standardisierte Möglichkeit für einen Proxy, GET https:// URIs zu unterstützen, er wurde vor ein paar Jahren in der IETF HTTP WG diskutiert, aber aus verschiedenen Gründen verworfen (Vertrauensprobleme mit Proxys hauptsächlich, wenn ich mich erinnere)

Es ist sehr unwahrscheinlich, dass die Anfrage an den proxy gesendet. Wie andere gesagt haben, wird CONNECT verwendet, um stellen Sie eine Verbindung zu www.youtube.com:443 her, dann gäbe es eine andere GET-Anforderung, die nicht die scheme (Protokoll) - oder authority (Server:Port usw.) - Teile des URI enthält.

In Ihrem Beispiel wäre es:

GET / HTTP/1.1
host: www.youtube.com:443
 1
Author: Adrien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-07-21 13:30:39