将HttpServletRequest转发到其他服务器


问题内容

HttpServletRequest在Spring Servlet中收到一个请求,希望将AS-IS(即GET或POST内容)转发到其他服务器。

使用Spring Framework最好的方法是什么?

我是否需要获取所有信息并构建一个新的HTTPUrlConnection?还是有更简单的方法?


问题答案:

不幸的是,没有简单的方法可以做到这一点。基本上,您必须重构请求,包括:

  • 正确的HTTP方法
  • 请求参数
  • 请求标头(HTTPUrlConnection不允许设置任意用户代理,Java/1.*始终附加“ ”,您需要HttpClient)
  • 身体

这是很多工作,更不用说它无法扩展了,因为每个这样的代理调用将占用您计算机上的一个线程。

我的建议:使用原始套接字或netty并在最低级别上拦截HTTP协议,只需动态替换一些值(例如Host标头)即可。您能否提供更多背景信息,为什么需要此背景信息?