代理中的 GET 和 CONNECT 方法
GET and CONNECT methods in a proxy
我正在用 C++ 制作 HTTP 代理;当客户端向代理发送 GET
或 CONNECT
请求时,代理解析数据包的 HTTP header,解析其中的主机名,打开另一个到服务器目的地的套接字并发送客户的要求。然后代理将服务器的响应发送给客户端。
这是代理向服务器发送的来自客户端的 GET
和 CONNECT
请求:
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
请求中向服务器发送了错误的参数吗?
获取。语法没有错,但如果请求没有被你伪造并且它真的会 www.gstatic.com 你可以检查自己是否有任何类型的请求生成 40x 状态代码。这是 Google 用于卸载静态内容的域。是否仍然如此,以及为什么 returns 40 倍的请求。转到 Google.
连接。如果您将 CONNECT 转发到服务器,这是错误的。 CONNECT 旨在绕过您的代理打开端到端的二进制连接。顺序为:
- 从客户端获取连接请求
- 打开到 IP:Port 的 TCP 连接(显然是在 DNS 解析之后)
- Return 如果连接成功打开或您选择的错误代码,则向客户端发送“200 OK”(可选地为最终用户添加一些 Text/HTML 形式的解释)
- 如果从任一端接收到数据 -> 将其转发到另一端,直到其中一个连接关闭,当您关闭另一端时。
我正在用 C++ 制作 HTTP 代理;当客户端向代理发送 GET
或 CONNECT
请求时,代理解析数据包的 HTTP header,解析其中的主机名,打开另一个到服务器目的地的套接字并发送客户的要求。然后代理将服务器的响应发送给客户端。
这是代理向服务器发送的来自客户端的 GET
和 CONNECT
请求:
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
请求中向服务器发送了错误的参数吗?
获取。语法没有错,但如果请求没有被你伪造并且它真的会 www.gstatic.com 你可以检查自己是否有任何类型的请求生成 40x 状态代码。这是 Google 用于卸载静态内容的域。是否仍然如此,以及为什么 returns 40 倍的请求。转到 Google.
连接。如果您将 CONNECT 转发到服务器,这是错误的。 CONNECT 旨在绕过您的代理打开端到端的二进制连接。顺序为:
- 从客户端获取连接请求
- 打开到 IP:Port 的 TCP 连接(显然是在 DNS 解析之后)
- Return 如果连接成功打开或您选择的错误代码,则向客户端发送“200 OK”(可选地为最终用户添加一些 Text/HTML 形式的解释)
- 如果从任一端接收到数据 -> 将其转发到另一端,直到其中一个连接关闭,当您关闭另一端时。