Java Servlet作为HTTP代理

Yve*_*030 5 java proxy servlets http-headers

我已经阅读了数百个SO帖子并研究了几个可用的Java HTTP代理源...但是我找不到解决问题的方法.

我写了一个代理Http-Requests的WebApp.WebApp正在运行,但是链接和引用会被破坏,因为代理页面的"根"指向我的服务器的根,而不是指向我的proxyservlet的路径.

为了更清楚:

  1. 我的ProxyServlet获取请求" http://myserver.com/proxy/ProxyServlet?foo=bar "

  2. ProxyServlet现在从ServerX获取页面内容(例如" http://original.com/test.html ")

  3. 只需从一个流读取和写入另一个流并复制标题,即可将页面内容传送到浏览器.

  4. 浏览器显示浏览器显示的页面,URL是原始请求(" http://myserver.com/proxy/ProxyServlet?foo=bar "),但所有相关链接现在指向" http:// myserver" .com/XXX.html "而不是" http://myserver.com/proxy/ProxyServlet/XXX.html "

是否有响应标题,我可以更改"路径",以便相对链接正确指向我的ProxyServlet?

(重写页面内容并替换链接会非常困难,因为页面包含相对寻址的元素,例如javascript代码和其他活动内容......)

(将我的Servlet的映射更改为"/*"也是不可能的......必须通过此路径访问...)

Szo*_*ske 5

你正在发明一个"反向代理",并错过了"URL重写"功能......在我的搜索结果的顶部,这是一个开源代理servlet,它执行此操作:http: //j2ep.sourceforge.net/docs/ rewrite.html

如果你不得不这样做,你应该知道系统架构可能有问题.放弃像Apache,nginex,Varnish这样的独立代理应始终是一个选项,因为在开始扩展时你必须添加一个(或更多!).