动态修改HTTP url



是否可以修改用户对的HTTP请求

www.example.com/options

而不是

www.example.com/options_and_params

我的场景是,大约有30000名用户连接到我公司的网络主干,我想在主干交换机和Radware LoadProof之间添加一个或多个服务器(使用我目前正在使用的代码)来实现这项工作。

在谷歌搜索了一整夜之后,我没有线索,但还有一些问题:

  1. 我不需要通过网络拦截每个数据包。有了像iptables这样的帮助,我可以过滤出我想要的包。我在使用iptables之前就已经做过了。然而,数据包并不等于HTTP流。我需要重新构造HTTP吗
  2. 如果我成功地找到了修改HTTP请求URL内容的方法,我仍然应该将其放回网络流中。正如我所知,TCP数据包有一个校验和,在我修改内容后,它一定是错误的。如何计算新的校验和并将数据包放回网络

这是我第一次做网络编程或数据包处理开发。欢迎提出任何建议。

这取决于您是在执行HTTP/1.0还是HTTP/1.1,以及它是需要修改的初始请求还是单个HTTP1.1会话中的所有请求。

如果你有数据包,并且可以在发送之前对其进行修改,并且你试图只修改请求,那么给定典型数据包的长度和URL在HTTP请求流中的位置(非常接近开头),并且它将是TCP流中发送的第一个东西,我认为你可以非常安全地假设它将出现在发送的第一个数据包,因此不会被拆分为多个数据包。

然而,如果这是HTTP/1.1流,那么将通过同一TCP连接发送多个请求,在这种情况下,在未来的请求中,URL很可能被拆分为两个TCP数据包。

如果您可以强制HTTP/1.0,或者如果您将初始或所有请求修改为HTTP/1.0的话,那么您可以非常确定第一个数据包将与TCP流的第一个数据包包应,并且您不太可能看到URL被拆分为多个数据包,这意味着没有重建,并且可以只进行替换。

然而,这将以新的TCP连接为代价,这是非常低效的。

如果你不这样做,并将其保留为HTTP/1.1,那么URL可能在未来任何请求中的任何随机点,因此会拆分为多个TCP数据包(根据URL的大小,实际上是两个)。

如果我答对了你的问题,那么这可能可以用一些像nginx这样的快速反向代理来完成。

相关内容

  • 没有找到相关文章

最新更新