关于跨域(子域)ajax请求的问题

假设我从http://www.example.com/index.html加载了主页面。 在那个页面上有一个js代码,它向http://n1.example.com//echo?message=hello发出ajax请求。 当收到响应时,主页面上的div用响应主体进行更新。

这将在所有stream行的浏览器上运行吗?

编辑:

显而易见的解决scheme是在www.example.com和n1.example.com前放置一个代理,并将其设置为使得每个到http://www.example.com/n1的子资源的请求被代理为http: //n1.example.com/ 。

跨域是完全不同的主题。 但跨子域相对容易。 所有你需要做的就是设置document.domain在父页面和iframe页面都是相同的。

document.domain = "yourdomain.com" 

更多信息在这里

另一种可能或可能不适合你的解决scheme是dynamic插入/删除DOM中指向目标域的脚本标记。 这将工作,如果目标返回JSON并支持callback。

函数处理结果:

 <script type="text/javascript"> function foo(result) { alert( result ); } </script> 

而不是做一个AJAX请求,你会dynamic地插入这样的东西:

 <script type="text/javascript" src="http://n1.example.com/echo?callback=foo"></script> 

所有的现代浏览器都支持CORS,因此我们应该利用这一点。

它使用简单的握手技术是通过发送/接收的HTTP头彼此相互信任的两个域。 为了避免XSS和其他恶意企图,同样的原产地策略是必要的,这是期待已久的。

为了发起一个跨源请求,浏览器发送一个Origin HTTP头的请求。 这个头的值是服务页面的网站。 例如,假设http://www.example-social-network.com上的某个页面尝试访问online-personal-calendar.com中的用户数据。; 如果用户的浏览器实现CORS,则会发送以下请求标头:

起源: http : //www.example-social-network.com

如果online-personal-calendar.com允许请求,它会在其响应中发送一个Access-Control-Allow-Origin标头。 标题的值指示允许哪些源网站。 例如,对前一个请求的响应将包含以下内容:

Access-Control-Allow-Origin: http : //www.example-social-network.com

如果服务器不允许交叉源请求,则浏览器将向example-social-network.com页面发送错误,而不是online-personal-calendar.com响应。

要允许访问所有页面,服务器可以发送以下响应标题:

Access-Control-Allow-Origin:*

但是,这可能不适用于安全问题。

很好的解释在这里下面的维基页面。 http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

另一个解决方法是将ajax请求定向到您域中的php(例如)页面,并在该页面中向子域发出cURL请求。

新的想法:如果你想跨越子域(www.domain.com和sub.domain.com),你正在使用Apache。 事情可以变得更容易。 如果一个子域实际上是一个在public_html(sub.domain.com = http://www.domain.com/sub/。子目录,所以如果你有ajax.domain.com/?request=subject…你可以做这样的事情:www .domain.com / AJAX /?请求=受试者

对我来说就像是一种魅力,对于less数几个Ajax请求来说,没有愚蠢的黑客,代理或者难事。

我find的最简单的解决scheme是在你的子域上创build一个PHP,并使用完整path将原始函数文件包含在其中。

例:

http://www.domain.com/ajax/this_is_where_the_php_is_called.php

子域:

sub.domain.com

创build:sub.domain.com/I_need_the_function.php

在I_need_the_function.php里面只需使用一个include:

include_once( “/服务器/path/的public_html / AJAX / this_is_where_the_php_is_called.php”);

现在从你的javascript调用sub.domain.com/I_need_the_function.php。

 var sub=""; switch(window.location.hostname) { case "www.domain.com": sub = "/ajax/this_is_where_the_php_is_called.php"; break; case "domain.com": sub = ""; break; default: ///your subdomain (or add more "case" 's) sub = "/I_need_the_function.php"; } xmlHttp.open("GET",sub,true); 

这个例子很简单,我可以做到。 您可能想要使用更好的格式化path。

我希望这可以帮助别人。 这里没什么杂乱的 – 而且你正在调用原始文件,所以任何编辑将适用于所有function。

我为跨子域编写了一个解决scheme,并且一直在为我的应用程序工作。 我使用iframe,并在两边设置document.domain =“domain.com”。 你可以在下面find我的解决scheme

https://github.com/emphaticsunshine/Cross-sub-domain-solution