2016-09-27 113 views
-1

我正在为浏览器制作代理应用程序。它只能使用标准库。到目前为止,我已经设法创建了服务器。当试图从客户端访问网页时,我得到了以下信息:Java独立代理程序

CONNECT gmail.com:443 HTTP/1.1 的User-Agent:Mozilla的/ 5.0火狐/ 49.0 代理连接:保持活跃 连接:保持活跃 主机:gmail.com:443

我的问题是:为了处理请求使用什么?如何处理文件下载?

回答

1

一旦你拿到CONNECT命令,做什么是问:创建上游连接,并返回适当的成功/失败反应。如果上游连接成功,您现在要做的就是同时在两个方向上复制字节。端点将处理所有SSL问题,上传,下载等。您无需担当其他角色。

-1

代理的一般行为如下:

  1. 从浏览器
  2. 接收请求,请对实际服务器的请求,解决所有重定向如果有必要
  3. 从服务器获取和passit响应在客户端

我没有进入改变请求/响应头,缓存等并发症

现在从上面,您正在与gmail.com refer进行SSL连接。

浏览器实际上发送的请求是正确的,在这种情况下,您需要实施握手,并使用HTTPS卸载SSL连接到gmail,并通过与浏览器协商的SSL将浏览器收到的响应发送给浏览器。

的建议是使用HTTP,而不是HTTPS,如果这不是一个生产平地机的系统,并尝试了第一的理念

+0

这是不正确的,它不是它在你的[链接]中说的(http://stackoverflow.com/questions/11697943/when-should-one-use-connect-and-get-http-methods-at -http代理服务器)。 – EJP

+0

该链接是关于CONNECT请求的参考和一些细节 – Ironluca

+0

您的链接正确地说'使用SSL(HTTPS),只有两个远程端点了解请求,并且代理无法解密它们。因此,它所做的一切就是使用CONNECT打开该隧道,并让两个端点(网络服务器和客户端)直接对话,这与您的答案相矛盾:特别是关于“在您的一侧卸载SSL”的部分。 – EJP