代理中的GET和CONNECT方法

时间:2016-03-19 17:46:39

标签: c++ sockets proxy http-proxy

我在C ++中制作HTTP代理;当客户端向代理发送GETCONNECT请求时,代理解析数据包的HTTP头,解析其中的主机名,打开另一个到服务器目的地的套接字并发送客户端'请求。然后代理会将服务器的响应发送给客户端。

以下是代理发送给服务器的客户端的GETCONNECT请求:

GET http://www.gstatic.com/generate_204 HTTP/1.1

CONNECT cr-input.getspeakit.com:443 HTTP/1.1

但是当我从服务器解析GET响应时,我发现了400状态代码,即Bad Request:这似乎是(来自维基百科):

  

格式错误的请求语法,无效的请求消息框架或欺骗性请求路由。

我是否在GET请求中向服务器发送了错误的参数?

1 个答案:

答案 0 :(得分:0)

  1. GET。语法没有错,但如果请求没有被您伪造,并且它真的要访问www.gstatic.com,您可以检查自己任何类型的请求都会生成40x状态代码。这是一个用于Google卸载静态内容的域名。是否仍然如此以及为什么它会为请求返回40x。转到Google。

  2. CONNECT。如果要将CONNECT转发到服务器,这是错误的。 CONNECT旨在绕过您的代理打开端到端二进制连接。顺序是:

    • 从客户端获取连接请求
    • 打开到IP的TCP连接:端口(显然在DNS解析后)
    • 返回" 200 OK"如果连接成功打开,则为客户端或您选择的错误代码(以及最终用户的文本/ HTML表单中的可选解释)
    • 如果从任一端收到数据 - >将它转发到另一端,直到其中一个连接关闭,当你关闭另一端时。