2012-04-03 277 views
0

我想在一个iframe加载外部网站。但由于同源相同域策略导致面临的问题。因此,为了解决这个问题,我使用了代理解决方案,在该解决方案中,我们将请求发送到代理文件(我用java编写),然后请求服务器并返回响应。这工作得很好。解决跨站脚本资源共享

但使用这种方法的所有页面都无法正确加载到我的iframe中。 目前我正在使用localhost。我现在面临的问题是有在抓取的网页像一些错误: - 在获取www.google.com我得到这些错误: -

GET http://localhost:8080/images/srpr/logo1w.png 404 (Not Found) 

a.html:101 GET http://localhost:8080/extern_js/f/CgJlbhICaW4gACswRTgALCswWjgALCswDjgALCswFzgALCswPDgALCswUTgALCswCjgAmgICaGUsKzCYATgALCswFjgALCswGTgBLCswQTgALCswTTgALCswTjgALCswVDgALCswaTgALCswkAE4ACwrMJIBOAAsKzDVATgALCsw2AE4ACwrMBg4ACwrMCY4ACyAAlCQAnA/Q4V9Cbp7fuo.js 404 (Not Found) 

这些错误来,因为相对路径已在指定网页我抓取(我猜)。我对吗?如果我那么如何纠正这些问题,以便纠正这些错误。

净搜索后,我得到了一个网站,这是否完美。请结帐http://optimizely.com

+0

有2级得到的错误,因为低信誉点,跨度由计算器 – sachinjain024 2012-04-03 13:52:26

+0

SOP检查我无法发布是有原因的...... * *为什么你想绕过它? – Matt 2012-04-03 13:54:45

+0

请提供您的问题_以提供更多信息。 – 2012-04-03 13:56:38

回答

1

的问题似乎是,如果一个网站使用相对的HREFs(相对于该网站是由加载域/路径),那么你的解决方案,因为你已经改变了明显的负荷域/路径的东西导致问题其他。

一种可能性是为你注入一个标签进入该页面正确的地方(在<head>节)这样正确设置基本href:

<base href="http://www.google.com"> 

请参见本文的详细信息:http://www.drostdesigns.com/base-href-tag/

该解决方案并非万无一失,因为如果该网站已使用<base href="xxx">标记,则可能会导致问题,并且如果JavaScript代码正在基于加载的域/路径进行操作,则基础href将无法解决该问题。这些问题是否重要取决于具体的页面。

如果基准href解决方案不起作用,您可能还必须代理所有其他资源请求(图像,ajax调用等),以便发送给其他主机的所有内容,但是向您请求的所有内容代理适当。这将是更加万无一失。

+0

谢谢jfriend00,你的答案是真的很有帮助。 – sachinjain024 2012-04-03 14:28:27

0

我们不可能仅仅通过您已发布的描述来说明问题......但如果答案确实如您所暗示的那样,那么只需纠正它 - 只要您得到一个相对链接,通过在你的代理脚本中加入域来使它成为一个完全合格的链接。