编写C HTTP代理服务器 - 如何接收和重定向HTTP响应

tem*_*ame 2 proxy network-programming http

我正在测试firefox.服务器从字符串接收来自firefox的HTTP请求,现在我不确定如何处理它.我是否需要连接到端口8080并以字符串形式发送请求?然后听8080端口的响应?如果是这样,响应将会是什么?我不确定期望什么类型的内容.一串HTML?然后我将其发送回firefox,也作为字符串?

另外,fyi,从其他阅读中我已经认识到有很多不同类型的代理 - 我对此还不知道.我的代理只需要充当客户端和实际互联网之间的中间人,不做任何其他事情.

Dav*_*rtz 5

代理HTTP的规则实际上非常复杂.但是你可能会忽略大部分内容,尤其是如果你不关心性能的话.

首先,你必须听一些端口.您需要解析收到的查询.它将包含一些行,每行后跟一个CRLF对.您将通过两个CRLF对知道查询头的结尾.可以有一个查询体(如果这是一个POST),你不想解析它,因为它很复杂.所以这就是你如何伪造它:

  1. 检查查询是否有任何Connection标题.如果你得到任何,删除它们.

  2. 在另一端建立与服务器的连接.

  3. 在发送请求和请求标头之后,但在标记请求标头结束的第二个CRLF之前,添加Connection: close标头.然后发送第二个CRLF.

  4. 现在代理两个方向.如果你懒得使用select或者你可以使用额外的过程或额外的线程poll.确保正确代理半封闭连接.(浏览器可能会在完成查询时关闭发送 - 它仍在侦听回复.)

  5. 浏览器不应尝试重新使用该连接.如果是HTTP/1.0,它将需要特定的权限来做到这一点,它将无法获得.如果是HTTP/1.1,服务器应接受其Connection: close请求并使用Connection: close自己的标头进行响应.

请注意,HTTPS实际上更简单.CONNECT如果您还需要支持请求,则必须解析请求.但是,您只需连接到另一端,报告成功或失败,然后进入双向代理模式.