代理中的 GET 和 CONNECT 方法

GET and CONNECT methods in a proxy

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

这是代理向服务器发送的来自客户端的 GETCONNECT 请求:

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

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

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

a malformed request syntax, invalid request message framing, or deceptive request routing.

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

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

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

    • 从客户端获取连接请求
    • 打开到 IP:Port 的 TCP 连接(显然是在 DNS 解析之后)
    • Return 如果连接成功打开或您选择的错误代码,则向客户端发送“200 OK”(可选地为最终用户添加一些 Text/HTML 形式的解释)
    • 如果从任一端接收到数据 -> 将其转发到另一端,直到其中一个连接关闭,当您关闭另一端时。