我已经困扰了一段时间,试图让我的自定义代理在浏览器发送CONNECT请求时正确处理。为了简单起见,让我解释一下我是如何处理这个过程的。也许在那时,有人可以帮助澄清我做错了什么。
来自浏览器的请求:
CONNECT google.com:443 HTTP / 1.1 User-Agent:Mozilla / 5.0(Windows; U; Windows NT 6.1; en-US; rv:1.9.2.18)Gecko / 20110614 Firefox / 3.6.18 GTB7.1 代理连接:保持活着 主持人:google.com
响应我通过普通套接字发送回浏览器:
建立HTTP / 1.1 200连接\ r \ nProxy-connection:保持活动\ r \ n \ r \ n
获取/ 主持人:google.com
一旦我得到类似的东西,我就可以与服务器建立我的安全套接字连接,并取回响应以发送回浏览器。
您认为正确的方向是什么?只是在我发送连接后我没有收到任何其他消息。
答案 0 :(得分:7)
我得到了那个请求并看到它的CONNECT所以我立即创建了一个 响应“建立连接”
一开始就错了。在 建立上游连接之前,不应发送“已建立连接”。你骗你的客户!
我开始考虑它,因为我还没有建立SSL 与浏览器握手
无关。完成后,就您而言,您将从客户端获得的下一件事是二进制。从这一点开始你应该做的就是复制字节。
你认为我需要通过端口8080关闭该套接字并建立 端口8080上的新SecureSocket
没有
一旦我得到类似的东西,我就可以建立我的安全 与服务器的套接字连接
错误。从客户端获取一些数据后,您应该通过与上游服务器的现有纯文本连接透明地发送数据。您不必亲自参与SSL。
我没有足够的数据只有CONNECT才能进入服务器。
是的,你这样做。当你被告知时,你应该建立上游连接,并告诉客户你已经这样做了,而不是之前。
您认为正确的方向是什么?
没有
只是在发送连接后我没有收到任何其他消息。
这表明你还没有发送过任何东西。 NIO代码很棘手。 write()API的返回代码是什么?