【问题标题】:Rebuild request header from HTTP proxy server to Remote Server in C在C中从HTTP代理服务器重建请求头到远程服务器
【发布时间】:2012-10-20 10:02:12
【问题描述】:

我需要开发一个 HTTP 代理服务器。我的代理服务器能够从网络浏览器中检索 HTTP 请求。而且我还能够连接到服务器。我无法理解如何进一步移动: 它如何将请求从代理服务器发送到远程服务器。
我有以下疑问:

  1. HTTP代理服务器发送到远程服务器的请求头格式
  2. 它是否与我从网络浏览器中收到的 GET、HEAD 和 POST 方法的标头相同。

我已尝试发送整个标头:
GET http://www.gmail.com/ HTTP/1.1
接受:text/html、application/xhtml+xml、/
接受语言:zh-CN
用户代理:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)
接受编码:gzip、deflate
代理连接:保持活动
主机:www.gmail.com

或者: GET / HTTP/1.1
主持人:www.gmail.com:80

【问题讨论】:

  • 我已尝试发送从 HTTP 请求头接收到的发送 GET 路径 HTTP/1.version\r\nHost:www.gmail.com:80\r\n

标签: c http proxy get


【解决方案1】:

从代理请求到 HTTP 服务器请求需要做的基本转换是更改第一行:

GET http://www.gmail.com/ HTTP/1.1

GET / HTTP/1.1

浏览器向代理发送请求时需要完整的 URL,以便代理可以进一步连接到真实服务器。但是,对服务器的 HTTP 请求必须GET 行中包含协议和主机名部分。

但是,这可能不是您唯一需要做的事情。 HTTP 代理是一个相当复杂的应用程序,因为浏览器代理连接与代理服务器连接的协议版本号和连接选项不同。

RFC 2616 包含大量有关 HTTP 代理应用程序正确行为的信息。

【讨论】:

  • 所以应该是这样的:GET / HTTP/1.1 Accept: text/html, application/xhtml+xml, / Accept-Language: en-US User-代理:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)接受编码:gzip,放气代理连接:保持活动主机:www.gmail.com
  • 我猜是这样,我看不到您的换行符在评论中的位置。但是您还需要对 Proxy-Connection 标头采取行动,因为它是由浏览器发送到代理的,并不打算传递给服务器。同样,请阅读 RFC 2616 了解完整详情。
  • 我可以连接到服务器,但问题是代理服务器没有从服务器读取整个响应。代理正在接收数据时,远程服务器正在重置连接。使用此代码读取数据是否有问题 while((n = read(rfd, buff, MAXLINE)) > 0) { write(connfd, buff, MAXLINE); printf("%s",buff); bzero(buff,MAXLINE); }
猜你喜欢
  • 1970-01-01
  • 2022-11-21
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2011-06-27
  • 2013-08-08
相关资源
最近更新 更多