“CONNECT”和“GET HTTPS”有什么区别?

elm*_*zun 8 networking proxy https http-proxy

在进入真正的问题之前,让我解释一下我的项目是如何工作的:为了简单起见,我的代理在我的笔记本电脑上,客户端(我的浏览器)也在那里;例如,远程服务器将是 YouTube。

由于 SwitchOmega 插件,客户端连接到代理的特定端口:客户端想要连接到 www.youtube.com 并且代理收到以下请求:

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
Run Code Online (Sandbox Code Playgroud)

有人告诉我,当代理收到CONNECT请求时,它应该打开一个到 IP:Port 的 TCP 连接,200 OK向客户端返回一条消息并发送数据,直到连接的一侧关闭。

使用另一个跟踪 HTTP 请求的插件 HTTP Trace,我在浏览器上看到了不同的请求:

GET https://www.youtube.com/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
and other data...
Run Code Online (Sandbox Code Playgroud)

那么,为什么我的代理会CONNECT www.youtube.com:443 HTTP/1.1在 HTTP Trace 显示时收到GET https://www.youtube.com/?他们的意思是一样的吗?

Ram*_*und 6

CONNECT处理请求

连接

CONNECT 方法将请求连接转换为透明的 TCP/IP 隧道,通常是为了通过未加密的 HTTP 代理促进 SSL 加密通信 (HTTPS)。

GET检索数据。

得到

GET 方法请求指定资源的表示。使用 GET 的请求应仅检索数据,不应有其他影响。(其他一些 HTTP 方法也是如此。)W3C 已经发布了关于这种区别的指导原则,称“Web 应用程序设计应遵循上述原则,但也应遵循相关限制”。

来源 - 超文本传输​​协议