我阅读了数百篇这样的文章,并研究了几个可用的Java代理资源.但我找不到解决问题的办法。
我编写了一个代理Http-请求的WebApp。WebApp正在工作,但是链接和引用会中断,因为代理页面的“根”指向我的服务器的根,而不是我的proxyservlet的路径。
为了更清楚地说明:
是否有一个响应头,我可以更改“路径”,以便相对链接正确指向我的ProxyServlet?
(重写页面内容和替换链接太难了,因为页面包含相对地址较多的元素,如javascript代码和其他活动内容.)
(将Servlet的映射更改为"/*“也是不可能的.它必须通过这条路径访问.)
发布于 2012-08-28 14:34:33
您正在发明一个“反向代理”,而忽略了"URL重写“功能.在我搜索结果的顶部,下面是一个开源代理servlet,它可以这样做:http://j2ep.sourceforge.net/docs/rewrite.html
此外,如果您必须这样做,您应该知道系统架构可能有问题。加入一个独立的代理,如Apache、nginex、Varnish应该始终是一种选择,因为您必须添加一个(或多个!)当你开始缩放的时候。
发布于 2013-11-04 14:17:56
听起来,您要代理的页面使用的是绝对链接,例如<a href="/XXX.html">
,意思是“无论在哪里找到该链接,都要相对于文档根查找它”。如果您控制了它,最好的办法是使代理目标在它的链接中更加宽松,而使用<a href="XXX.html">
。如果不能这样做,则需要使用JSoup重写这些URL(一些示例代码):
Document doc = Jsoup.parse(rawBody, getDisplayUrl());
for(Element cssALink : doc.select("link[rel=stylesheet],a[href]"))
{
cssALink.attr("href", cssALink.absUrl("href"));
}
for(Element imgJsLink : doc.select("script[src],img[src]"))
{
imgJsLink.attr("src", imgJsLink.absUrl("src"));
}
return doc.toString();
https://stackoverflow.com/questions/12073147
复制