远程脚本可以向托管脚本的服务器发出请求吗?同源政策

时间:2012-07-20 19:59:57

标签: javascript html http

如果我有服务器:

www.server1.com

从以下位置加载脚本:

www.server2.com/script-to-load.js

script-to-load.js可以对www.server2.com进行ajax调用吗?

感谢。

3 个答案:

答案 0 :(得分:3)

是。有三种方法可以做到这一点:

  1. CORS:使用此方法,标题会添加到www.server2.com,允许从www.server1.com访问。这是在JavaScript中进行跨域脚本编写的“正确”方法。请参阅:http://www.w3.org/TR/cors/

  2. 使用服务器端“代理”:使用此方法,www.server1.com上的服务器端脚本访问www.server2.com上的文件并返回响应。这是一种实用的方法,可以从您控制的服务器上的网站访问您无法控制的服务器上的数据。下面是一个示例脚本。

  3. JSONP:此方法利用了script标记免于跨域限制的事实。请参阅:http://en.wikipedia.org/wiki/JSONP


  4. 用于跨域脚本编写的示例PHP“代理”脚本:

    执行选项2的示例PHP脚本是:

    <?php
       ini_set("user_agent", $_SERVER['HTTP_USER_AGENT']); // temporarily override CURLs user agent with the user's own
       echo file_get_contents($_REQUEST["www"]);
    ?>
    

    将此脚本放在www.server1.com/proxy.php并致电http://www.server1.com/proxy.php?www=http://www.server2.com/ajax.js。该脚本将返回www.server2.com/ajax.js的内容,从而绕过跨域限制。

答案 1 :(得分:2)

没有

Javascript没有关于代码来自何处的概念。

仅根据正在执行脚本的文档应用同源策略。

答案 2 :(得分:2)

如果这是服务器端JS(您说服务器正在加载脚本),则服务器端JS中没有相同的源限制。浏览器实现了同源限制,并影响浏览器中运行的脚本。

此外,在浏览器中,脚本的来源并不重要。浏览器查看网页的来源,并将ajax调用(由页面中的任何脚本生成)限制到网页的域。脚本可以来自任何地方,它们的来源不会影响基于浏览器的相同来源对页面本身来源的限制。

Here是基于浏览器的同源限制的一个很好的参考。