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

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

在进入真正的问题之前,让我先解释一下我的项目是如何运作的:为了简单起见,我的代理在我的笔记本电脑上,客户端(我的浏览器)也在那里;远程服务器将是 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

有人告诉我,当代理收到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...

那么,为什么我的代理接收了信息CONNECT www.youtube.com:443 HTTP/1.1,而 HTTP Trace 却显示出来GET https://www.youtube.com/?它们的意思是一样的吗?

答案1

连接处理请求

连接

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

尽管得到检索数据。

得到

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

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

答案2

我认为你正在处理一个美容问题。

GET https://www.youtube.com/最有可能的只是记录的内容,表明提取已完成GET,并且目标是https://www.youtube.com

代理支持 URI 没有标准化的方法GET https://,几年前 IETF HTTP WG 就提出了这一建议,但由于各种原因(如果我没记错的话,主要是代理的信任问题)而被废弃。

这不太可能是发送给代理的请求。正如其他人所说,CONNECT用于连接到www.youtube.com:443,那么就会有一些其他 GET 请求不包含 URI 的方案(协议)或权限(服务器:端口等)部分。

在您的示例中它将是:

GET / HTTP/1.1
host: www.youtube.com:443

相关内容